Xcode 找不到 strip-frameworks.sh 目录
Posted
技术标签:
【中文标题】Xcode 找不到 strip-frameworks.sh 目录【英文标题】:Xcode unable to find strip-frameworks.sh directory 【发布时间】:2016-01-27 09:34:06 【问题描述】:我最近将 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
【问题讨论】:
Strip Framework Architectures 应该在 Build Phases 选项卡下的 Embed Frameworks 之后。您可以使用鼠标拖动它(因为它不是很明显)。 Realm 应该在他们的文档中指定这个指令。 @marius 帮助说明了这一点。 【参考方案1】:从错误消息看来,您似乎没有将 Realm.framework
和 RealmSwift.framework
添加到 嵌入式二进制文件 窗格中,您可以在 General 中找到该窗格您的项目的选项卡,如下所示:
为了进一步验证,您可以检查标签构建阶段。它应该如下所示:
注意:确保运行脚本阶段在嵌入框架阶段之后。
为什么需要这个脚本?
供应的框架不仅仅是单个可执行文件,实际上是 FAT 二进制文件,它们是不同架构上链接的可执行文件的存档。这包括 arm64
和 armv7
的架构切片,它们是在手机上部署所必需的,以及 i386
和 x86_64
是在模拟器中运行应用程序所必需的。
strip-frameworks.sh
脚本的主要职责是删除不必要的切片。这减少了最终包的大小,并且对于 AppStore 部署是必要的,因为 iTunes Connect 拒绝具有模拟器架构的应用程序。
更多详情
脚本在构建设置VALID_ARCHS
的基础上运行。因为这改变了框架的签名可执行文件,所以它还需要处理代码签名。自从引入位码以来,它也得到了进一步的后期处理作为责任。它从框架包中提取包含的*.bcsymbolmap
文件,并将它们放置在*.xcarchive
中的正确路径中。
FAQ topic on Bitcode of PSPDFKit 很好地解释了 BCSymbolMap 是什么:
BCSymbolMap 很像位码的 dSYM。 Xcode 将其构建为创建应用程序二进制文件的一部分,也适用于每个动态框架。重新符号化函数/方法名称以理解崩溃程序是必需的。
【讨论】:
马吕斯,谢谢!我从未将框架添加到 Embedded Binaries 窗格中,现在它可以完美运行!一个灯泡刚刚在我脑海中熄灭 - 脚本中的$FRAMEWORKS_FOLDER_PATH
与嵌入式框架窗格中的框架目标有关,是吗?
是的,解析的构建设置$FRAMEWORKS_FOLDER_PATH
配置/引用$BUILT_PRODUCTS_DIR
中Frameworks
目录的相对路径。所以脚本失败了,因为框架没有复制到正确的位置。这不仅对脚本很重要,对发布也很重要,因为动态框架不会成为可执行文件的一部分,并且是分开的,因此必须捆绑在一起才能在运行时动态加载。
构建阶段的顺序至关重要!在嵌入框架之后剥离框架架构。谢谢你让我认识到@marius
@marius 我已经确认了所有这些步骤,但仍然有问题中列出的错误。任何其他想法可能是什么问题?
@marius - 更新答案以包括run script
步骤需要在embed binaries
之后会有所帮助,并且应该检查这一点。我怀疑在升级到最新版本的 Realm(或 Xcode)的某个阶段,我的 embed binaries
步骤“神奇地”移到了最后。上次触摸时(几个月前)它正在构建,但当它以这种方式破坏时,它会非常混乱。【参考方案2】:
在我的例子中,改变Build Phases中的流程顺序来解决
不行 好的【讨论】:
以上是关于Xcode 找不到 strip-frameworks.sh 目录的主要内容,如果未能解决你的问题,请参考以下文章