我在您的帖子中看到两个问题/问题:
1)你得到错误
'接收器类型'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
这应该阻止编译器抱怨私有方法不存在。
对于未来,您应该阅读 about class-dump
,这是一个您可以在 SDK 中的公共或私有框架上运行的工具,并自己反向生成上述标头。它们会随着 SDK 的每个版本而改变,因此能够自己生成它们是件好事。
2)您询问有关在没有代码签名的情况下使用权利的问题。
首先,在这里阅读 Saurik 最初写的关于它的内容。 是的,您确实需要对权利进行代码签名。但是,不,越狱手机上不一定要有 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
从另一个来源下载,然后它工作。所以,小心。