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

时间:2012-06-17 06:17:53

标签: jailbreak iphone-privateapi entitlements code-signing-entitlements

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

现在我想使用私有API launchApplicationWithIdentifier:suspended:。所以我需要添加

<key>com.apple.springboard.launchapplications</key>
<true/>

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

'Receiver type 'UIApplication' for instance message does not declare a method 
 with selector 'launchApplicationWithIdentifier:suspended:''

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

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

谢谢。

1 个答案:

答案 0 :(得分:5)

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

1)您收到错误

  

'接收器类型'UIApplication'例如消息未声明a   选择器'launchApplicationWithIdentifier:suspended:''

的方法

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

例如,here's a copy of the full UIApplication.h header

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

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

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

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

2)您要求在没有代码签名的情况下使用权利。

首先,read what Saurik originally wrote about it here是的,您需要对权利进行代码签名。但是,没有,它不必与越狱手机上的Apple证书一起使用。您可以通过下载ldid可执行文件并执行

来伪造代码签名
cd MyAppName.app
ldid -Sentitlements.xml MyAppName

假设您的应用名为 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>

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