iOS如何使用Entitlement.plist指定我的应用程序的属性

wyp*_*wyp 6 jailbreak iphone-privateapi entitlements code-signing-entitlements

我正在使用Jailbreak + Appsync + iOS5.0.1设备(没有开发人员许可证但有一些技巧我可以在设备上运行我的应用程序)

现在我想使用私有API launchApplicationWithIdentifier:suspended:.所以我需要补充一下

<key>com.apple.springboard.launchapplications</key>
<true/>
Run Code Online (Sandbox Code Playgroud)

到myApp.entitlements.plist文件.然后它应该工作但我仍然得到错误

'Receiver type 'UIApplication' for instance message does not declare a method 
 with selector 'launchApplicationWithIdentifier:suspended:''
Run Code Online (Sandbox Code Playgroud)

然后我发现有人说,如果我想使用Entitlements.plist,必须启用代码签名.这是真的吗?我必须拥有开发者许可证吗?

或者有没有其他方法来使用这种方法?我读了一些关于如何使用私有API的方法.这似乎很难.我是iOS开发的新手.

谢谢.

Nat*_*ate 5

我在帖子中看到两个问题/问题:

1)你得到错误

'Receiver type'UIApplication'例如消息没有声明一个带有选择器'launchApplicationWithIdentifier:suspended:''的方法

这是一个编译错误吗?听起来可能就是这样.这就是事情.公共框架集中有大量的objective-c类,它们中仍然有一些私有方法.因此,在公共框架的正常头文件(.h文件)中,将不会列出这些私有方法.但是,它们存在于动态库中.如果您想构建一个使用这些的应用程序,那么解决问题的一种方法是找到完整标题的副本.

例如,这是完整的UIApplication.h头文件的副本.

然后,您可以复制私有方法的声明,并在您自己的代码中声明它们如下:

// Used to disable warning for non-public methods
@interface UIApplication (Extensions)
  - (BOOL)launchApplicationWithIdentifier:(id)identifier suspended:(BOOL)suspended;
@end
Run Code Online (Sandbox Code Playgroud)

这应该会阻止编译器抱怨私有方法不存在.

对于未来,您应该阅读class-dump,这是一个可以在SDK中的公共或私有框架上运行的工具,并自己反向生成上面的标题.它们会随着SDK的每个版本而改变,因此能够自己生成它们是很好的.

2)您询问在没有代码签名的情况下使用权利.

首先,阅读Saurik最初在此处撰写的内容. 是的,您需要对权利进行编码签名.但是,,它不必与越狱手机上的Apple证书.您可以通过下载ldid可执行文件伪造代码签名,然后执行

cd MyAppName.app
ldid -Sentitlements.xml MyAppName
Run Code Online (Sandbox Code Playgroud)

假设您的应用程序名为MyAppName,并且您创建了权利文件entitlements.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.springboard.launchapplications</key>
    <true/>
  </dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

小心.我ldid在互联网上找到了几个地方.我真的不确定哪一个是正确的.我记得有一次,我试图这样做,ldid我使用的版本不能用于签署权利.我ldid从其他来源下载,然后它工作.所以,要小心.