我目前正在进行一个名为“ LockWatch”的iOS调整,该调整应该在锁定屏幕上显示类似watchOS的表盘。此调整涉及一个基本的插件系统,该系统从指定目录加载捆绑包(name.watchface),该目录到目前为止已经可以使用。

问题是,由于缺少或无效的代码签名,这些捆绑包无法在设备上执行,但是在iOS Simulator内部,捆绑包的加载和执行就很好。

我通过添加“ com.apple.backboard.client”权利来在iOS 9上进行此工作(因为日志表明缺少该特定权利,因此SpringBoard崩溃了)。

bundle项目本身是一个简单的Xcode项目,使用macOS选项卡中的“ Bundle”目标创建,Base SDK设置为“ Latest iOS(10.2)”。

我尝试了以下签名方法:


完全不签名
Xcode管理的签名
Xcode手动签名(用于Debug和Release)
使用ldid签名而没有权利
使用ldid和权利进行签名


日志在这两个文本之间更改:

SpringBoard(CoreFoundation)[PID] <Notice>: Error loading /var/mobile/Library/LockWatch/Watch Faces/prototype.watchface/prototype:  dlopen(/var/mobile/Library/LockWatch/Watch Faces/prototype.watchface/prototype, 265): no suitable image found. Did Find:
/var/mobile/Library/LockWatch/Watch Faces/prototype.watchface/prototype: required code signature missing for '/var/mobile/Library/LockWatch/Watch Faces/prototype.watchface/prototype'

SpringBoard(CoreFoundation)[PID] <Notice>: Error loading /var/mobile/Library/LockWatch/Watch Faces/prototype.watchface/prototype:  dlopen(/var/mobile/Library/LockWatch/Watch Faces/prototype.watchface/prototype, 265): no suitable image found. Did Find:
/var/mobile/Library/LockWatch/Watch Faces/prototype.watchface/prototype: code signature invalid for '/var/mobile/Library/LockWatch/Watch Faces/prototype.watchface/prototype'


由于无法执行二进制文件,因此无法将其主类实例添加到数组,并且SpringBoard崩溃。

最佳答案

看来我终于自己解决了。

事实证明,表盘束根本没有签名(因此出现required code signature missing消息)。

我在包含以下脚本的包中添加了Run Script阶段:

/usr/bin/codesign --force --sign - --timestamp=none $CODESIGNING_FOLDER_PATH/$PRODUCT_NAME

当我研究关于代码签名的另一个问题时,我想到了这个主意,有人建议清除_CodeSignature文件夹的内容。在我的构建输出中显然不存在。

关于ios - iOS:代码签名无效/缺少必需的代码签名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42133980/

10-09 07:04
查看更多