Iphone Settings.bundle&;Cydia应用程序的钥匙链不';行不通

Iphone Settings.bundle&;Cydia应用程序的钥匙链不';行不通,iphone,objective-c,ios,jailbreak,cydia,Iphone,Objective C,Ios,Jailbreak,Cydia,我正在开发与Cydia一起发布的应用程序。因此,它安装在/Applications文件夹中,而不是/var/mobile/Applications/像往常一样安装在AppStore应用程序中。我认为安装会给我带来一些巨大的问题。 起初,用著名的苹果公司的KeychainItemWrapper进行钥匙链读写根本不起作用。 另外,我的settings.bundle也不起作用。应用设置不显示在settings.App中 当我在模拟器中测试应用程序,甚至直接从Xcode将其部署到设备(它被部署到/var

我正在开发与Cydia一起发布的应用程序。因此,它安装在/Applications文件夹中,而不是/var/mobile/Applications/像往常一样安装在AppStore应用程序中。我认为安装会给我带来一些巨大的问题。 起初,用著名的苹果公司的KeychainItemWrapper进行钥匙链读写根本不起作用。 另外,我的settings.bundle也不起作用。应用设置不显示在settings.App中

当我在模拟器中测试应用程序,甚至直接从Xcode将其部署到设备(它被部署到/var/mobile/Applications/)时,一切都很顺利

我尝试将installed.app移动到var/mobile/Applications/XXXXXX/myapp.app,并将mobile:mobile作为其所有者。这没用

有什么办法可以让这一切顺利进行吗

设置包 越狱应用的设置有点不同。您需要做一些类似于normalsettings.bundle的操作,但有一些不同之处

你应该让你的应用程序依赖于
preferenceloader
软件包,这有助于越狱应用程序管理设置。因此,在DEBIAN/control文件中会有如下内容:

软件包:com.mycompany.MyApp
名称:MyApp
版本:2.2-2
架构:iphoneosarm
取决于:首选加载程序
描述:为越狱iPhone做点什么
...
钥匙链 为了使我的应用程序能够使用钥匙链,我需要在二进制文件中添加权限。我发现需要哪些权限的方法是首先以正常方式构建应用程序(不是越狱应用程序,只是使用Xcode的普通第三方应用商店应用程序)。然后,我检查了Xcode构建的二进制文件中的权限:

ldid -e MyApp.app/MyApp
然后将这些权利拼接到一个新的authentications.xml文件中。我相信你的应用程序的权利应该是这样的:

应用程序标识符
L44W4W8ABC.com.mycompany.MyApp
aps环境
发展
com.apple.developer.team-identifier
L44W4W8ABC
这种增加权利的方法可能是不必要的。有关其他选项,请参见问题下方的评论。但是,由于其他原因,我添加了其他权利,但无法通过Xcode实现。

Settings Bundle 越狱应用的设置有点不同。您需要做一些类似于normalsettings.bundle的操作,但有一些不同之处

你应该让你的应用程序依赖于
preferenceloader
软件包,这有助于越狱应用程序管理设置。因此,在DEBIAN/control文件中会有如下内容:

软件包:com.mycompany.MyApp
名称:MyApp
版本:2.2-2
架构:iphoneosarm
取决于:首选加载程序
描述:为越狱iPhone做点什么
...
钥匙链 为了使我的应用程序能够使用钥匙链,我需要在二进制文件中添加权限。我发现需要哪些权限的方法是首先以正常方式构建应用程序(不是越狱应用程序,只是使用Xcode的普通第三方应用商店应用程序)。然后,我检查了Xcode构建的二进制文件中的权限:

ldid -e MyApp.app/MyApp
然后将这些权利拼接到一个新的authentications.xml文件中。我相信你的应用程序的权利应该是这样的:

应用程序标识符
L44W4W8ABC.com.mycompany.MyApp
aps环境
发展
com.apple.developer.team-identifier
L44W4W8ABC

这种增加权利的方法可能是不必要的。有关其他选项,请参见问题下方的评论。但是,由于其他原因,我添加了其他权利,但无法通过Xcode实现。

您是否对应用程序进行代码签名?keychain api依赖于codesigYes,我签署了应用程序,但没有苹果提供的证书。我自己生成的。若应用程序并没有进行代码签名,它甚至不会在我的设备上启动。正如我所发现的,代码签名也需要设置实体元素。所有问题都解决了。谢谢大家。我遇到了同样的问题,你是如何在你的JB应用程序上获得keychain访问权限的。Chris,你必须添加EntElements(选择你的项目,在摘要中向下滚动到底部,然后单击“EntElements”复选框,如果默认情况下没有添加keychain访问组,则添加keychain访问组)。在此操作之后,KeychainItemWrapper工作正常。您是否对应用程序进行代码签名?keychain api依赖于codesigYes,我签署了应用程序,但没有苹果提供的证书。我自己生成的。若应用程序并没有进行代码签名,它甚至不会在我的设备上启动。正如我所发现的,代码签名也需要设置实体元素。所有问题都解决了。谢谢大家。我遇到了同样的问题,你是如何在你的JB应用程序上获得keychain访问权限的。Chris,你必须添加EntElements(选择你的项目,在摘要中向下滚动到底部,然后单击“EntElements”复选框,如果默认情况下没有添加keychain访问组,则添加keychain访问组)。在这个操作之后,KeychainItemWrapper工作正常。谢谢,我认为PreferenceLoader是唯一能让它工作的方法。@是的,PreferenceLoader是我所有越狱应用程序使用的。PreferenceLoader对Keychain wrapper有帮助吗?@Chris,不,PreferenceLoader没有帮助。我认为他需要添加一个单独的授权xml文件(并用
ldid-Sentitlements.xml
对其进行代码签名)。关于授权和钥匙链访问。谢谢,我认为PreferenceLoader是唯一能让它工作的方法。@Albia,是的,PreferenceLoader是我所有越狱应用程序使用的。PreferenceLoader对钥匙链包装有帮助吗?@Chris,不,PreferenceLoader对此没有帮助。我认为他需要添加一个单独的授权xml文件(并用
ldid-Sentitlements.xml
对其进行代码签名)。关于权利和钥匙链访问。