Xcode无法找到strip-frameworks.sh目录

我最近将Xcode更新到版本7.1,其中包括Swift 2.1。 我安装了Swift 2.1而没有任何麻烦。 在尝试运行我的项目之后,我意识到我需要获取最新版本的Realm,因为之前的版本不支持Swift 2.1。 我删除了旧框架并导入了Realm 0.96.2。 每当我跑,我现在得到这个错误:

bash: /Users/userName/Library/Developer/Xcode/DerivedData/appName-ghiroqitgsbvfhdqxsscyokyoouz/Build/Products/Debug-iphoneos/appName.app/Frameworks/Realm.framework/strip-frameworks.sh: No such file or directory 

我怀疑问题在于如果您希望在App Store中提交应用程序所需的脚本,因此我删除了运行脚本阶段,添加了新脚本,并从Realm文档站点复制了脚本:

 bash "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/Realm.framework/strip-frameworks.sh" 

我认为那会解决它,但事实并非如此。 然后我认为问题可能出在Realm.framework或RealmSwift.framework文件中,所以我删除了它们并重新导入它们(以防万一我搞砸了)。 没有改变。 有谁知道这个错误是否有解决方法?

谢谢! -CodeIt

从错误消息中可以Realm.framework ,您没有将Realm.frameworkRealmSwift.framework添加到嵌入式二进制文件窗格中,您可以在项目的“ 常规”选项卡中找到该窗格,如下所示:

嵌入式二进制文件

要进一步validation,您可以选中Build Phases选项卡。 它应该如下所示:

建立阶段

注意:确保运行脚本阶段位于“ 嵌入框架”阶段之后。

为什么需要这个脚本?

销售的框架不仅仅是单个可执行文件,而且实际上是FAT二进制文件,它们是不同体系结构上链接可执行文件的存档。 这包括arm64armv7架构片,它们是在手机上部署所必需的,以及在模拟器中运行应用程序所必需的i386x86_64

strip-frameworks.sh脚本的主要职责是处理删除不必要的切片。 这减少了最终的包大小,并且是AppStore部署所必需的,因为iTunes Connect拒绝使用模拟器架构的应用程序。

更多细节

该脚本基于构建设置VALID_ARCHS 。 因为这正在改变框架的签名可执行文件,所以它还需要处理代码签名。 自从引入bitcode以来,它还得到了进一步的后期处理作为责任。 它从框架包中提取包含的*.bcsymbolmap文件,并将它们放入*.xcarchive中的正确路径中。

关于PSPDFKit的Bitcode的FAQ主题对BCSymbolMaps是什么有很好的解释:

BCSymbolMap很像bitcode的dSYM。 Xcode将其构建为创建应用程序二进制文件的一部分,也适用于每个动态框架。 重新符号化函数/方法名称以理解crashers是必需的。