我正在使用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开发的新手。
谢谢。
答案 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
,然后就可以了。所以,要小心。