【问题标题】:How do I change my iOS applications' entitlements?如何更改我的 iOS 应用程序的权利?
【发布时间】:2013-01-30 01:45:23
【问题描述】:

我需要运行以下代码来关闭我的 iPhone 屏幕。

在 iOS6 上:

void (*BKSDisplayServicesSetScreenBlanked)(BOOL blanked) = (void (*)(BOOL blanked))dlsym(RTLD_DEFAULT, "BKSDisplayServicesSetScreenBlanked");

然后使用:

BKSDisplayServicesSetScreenBlanked(1); // 1 to dim, 0 to undim

它不起作用。有人告诉我,我需要com.apple.backboard.client 授权才能在我的 iphone 上运行。我不知道如何设置这些权利。我见过几种设置权利的方法,但它们让我很困惑,比如这个。

是的,您确实需要对权利进行代码签名。但是,不,它没有 越狱手机上必须有苹果证书。你可以 伪造代码签名,通过下载 ldid 可执行文件,然后做

cd MyAppName.app 
ldid -Sentitlements.xml MyAppName

假设您的应用名为 MyAppName 并且您已获得权利 文件权利.xml。我相信这个权利文件会 为您工作,如果您使用 ldid 伪造代码签名。

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
 "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
   <dict>
     <key>com.apple.backboard.client</key>
     <true/>
   </dict> 
</plist>

即使使用上述方法,我将上述权利文件放在哪里?

【问题讨论】:

    标签: ios objective-c xcode jailbreak entitlements


    【解决方案1】:

    权利在 Xcode 项目文件中设置或在 Xcode 项目选择的权利文件中设置。

    在“Summary”或“Build Phases”的项目设置中查看设置或权利文件的名称

    【讨论】:

    • (-1) 这个答案是错误的,或者非常不完整。这个添加权利的正常过程不适用于为越狱应用程序添加这种权利。
    • 我可以确认它不适用于越狱应用程序。 (iOS 7.0.4)
    【解决方案2】:

    对于越狱应用/权利,您需要执行以下操作。首先,创建一个名为entitlements.xml(或任何你喜欢的)的文件:

    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
      <dict>
        <key>com.apple.backboard.client</key>
        <true/>
      </dict>
    </plist>
    

    您可以根据需要添加更多权利。此示例文件仅授予应用 com.apple.backboard.client 权利。

    你把这个文件放在哪里并不重要。关键是:

    1. 您需要修改 Xcode 的 SDKSettings.plist 文件 as shown hereCODE_SIGNING_REQUIRED 应设置为 NO
    2. 不要在 Xcode 中对您的应用程序进行代码签名。在 Build Settings 中,确保代码签名标识设置为 Don't Code Sign
    3. iOS 设备(不是模拟器!)构建您的应用程序后,然后转到您的 Mac 上的输出文件所在的目录。对于名为 HelloWorld 的应用程序,您正在寻找 HelloWorld.app 文件夹。它可能因您的配置而异,因此我不会费心告诉您它在哪里。如有疑问,请使用命令行find 命令。
    4. this locationsource from here 下载预构建的ldid
    5. 将entitlements.xml 文件复制到HelloWorld.app 所在的同一目录中。 (注意:你没有必须把它放在这里......如果你把它放在其他地方,只需调整我在下面显示的命令行)。
    6. 将目录更改为您的 entitlements.xml 文件所在的目录。
    7. Fake code-sign with this command:
    $ldid -Sentitlements.xml HelloWorld.app/HelloWorld
    

    之后,您需要传输整个 HelloWorld.app 文件夹才能在您的设备上安装该应用程序。有很多方法可以做到这一点,听起来你已经有办法了。

    我使用脚本设置了整个过程,以使其更容易。

    注意:我没有说明此权利是否是在 iOS 6 上用于BKSDisplayServicesSetScreenBlanked() 调用的正确权利。我尚未对此进行测试。我知道此权利允许您在较低的 iOS 版本上使用 SBDimScreen()。但是,这个答案只是描述如何为越狱应用添加这种权利。

    【讨论】:

    • 我不知道错误信息是什么,因为你没有使用格式化。请在 exact 输出周围加上刻度线(大多数键盘的左上角)。如果您确切地显示您尝试过的命令(也使用代码刻度线格式化)也会有所帮助。
    • 而且,您确实需要键入我列出的命令。 -S 是大写的,不是小写的,它和entitlements.xml 之间没有空格。
    • 请在终端导航到您的构建产品所在的目录,然后进入screenoffios6.app/。在该目录中,发出命令file screenoffios6 并告诉我输出是什么(请在您的评论中加上勾号)。另外,您使用哪个版本的ldid(我在答案中显示的链接)来获取ldid
    • 这看起来不错,就仅作为一种架构而言。您可以在同一目录中运行此命令:lipo -info screenoffios6 吗?您的系统可能没有lipo,但希望有。
    • 那也应该不错。在这一点上,我不太确定可能出了什么问题。我唯一能想到的就是将您的二进制文件发布到其他站点并链接到它,这样我就可以下载screenoffios6 可执行文件,并尝试自己签名。我只需要可执行文件,而不需要运行您的应用程序所需的任何其他资源(Info.plist、图标等)。这就是我目前所能想到的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 2015-11-23
    • 2014-05-01
    • 2019-06-13
    • 2010-09-19
    • 1970-01-01
    相关资源
    最近更新 更多