如何在 *.framework 包中省略或签名未签名的文件

Posted

技术标签:

【中文标题】如何在 *.framework 包中省略或签名未签名的文件【英文标题】:How to omit or sign unsigned files inside *.framework package 【发布时间】:2016-08-27 09:38:49 【问题描述】:

谁能解释那些未签名的文件(下图中未突出显示的文件)如何进入框架(Cocoa Touch Framework)包以及如何让这些文件远离那里?

另外,从那里手动删除它们是否安全?

要获取和查看这些文件,我执行以下操作:

    构建应用程序 找到并解压它的 *.ipa 文件 然后是 Payload -> 应用程序 -> “显示包内容” -> 框架

注意!对于框架项目中的每个 *.swift 文件,它都会在其中创建一组这些文件:


这是我解决问题的方法。

    在 Objectvie-C 中创建基础项目或使用任何旧维护的 Objective-C 项目 在 Swift 中创建和实现一个框架(Cocoa Touch Framework)项目 为该框架创建 podspec 并将其上传到存储库 使用 CocoaPods 将该框架包含到基础项目中 在模拟器和有线设备上构建和运行应用程序正常(一切正常) 构建和/或上传到 iTunesConnect 不行,它失败了!

这里是关于那个案例的更详细的讨论 Signing errors with use_frameworks! and unique provisioning profiles

而且我怀疑 XFeature.framework 中所有那些未突出显示的文件都不属于其中。 为什么?

因为当我将包含这些文件的 ipa 包上传到 iTunesConnect 时 它抛出此错误(对于每个未突出显示的文件):

错误 ITMS-90171 无效的捆绑结构 - 不允许使用二进制文件“XApp.app/Frameworks/XFeature.framework/XView.o”。除了受支持的捆绑包的 CFBundleExecutable 之外,您的应用程序不能包含独立的可执行文件或库。有关 ios 应用程序包结构的信息,请参阅 https-:-//developer.apple.com/go/?id=bundle-structure 上的 Bundle Programming Guide。

另一方面,当我删除它们(手动删除)时,错误消失并且上传成功。

所以我猜这些文件要么不需要,要么根本没有正确签名。

从这里往哪走?

    想办法让这些文件远离框架内容 或找到一种方法来签署这些文件

欢迎任何帮助!

【问题讨论】:

【参考方案1】:

好的,所以这次我以自己的方式解决了这个问题。 通常,解决方案比以往任何时候都容易。

这次错误错误 ERROR ITMS-90171 的原因是 cocoa pod 的 *.podspec 文件中的指令。

这个:s.resource = 'MyPod/*'

不知道我是怎么错过的,但“MyPod/*”字面意思是,包括 MyPod 目录中的所有内容,除了图形资源还包含 *.swift 文件。

所以我只需要将图形 aasets 作为资源包含,然后通过将该行更改为:s.resource = 'MyPod/Graphics.xcassets' 修复了问题。没有错误 ITMS-90171 了。


Cocoapods 团队还创建了增强问题,以帮助避免将来发生此类事情。 Add a linter on the files found inside spec.resources #5794

【讨论】:

以上是关于如何在 *.framework 包中省略或签名未签名的文件的主要内容,如果未能解决你的问题,请参考以下文章

如何获取Entity Framework在执行savechanges()前或执行后所生成的SQL语句

Android APK如何签名

Qt Installer Framework:如何卸载以前的版本?

ipa重签名

Xcode 10 签名错误:Frameworks/libswiftsimd.dylib:代码对象根本没有签名

升级到 5.4 后在 Laravel BrowserKit 包中找不到 PHPUnit\Framework\Constraint\Constraint