Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Xcode找不到strip-frameworks.sh目录_Ios_Xcode_Realm - Fatal编程技术网

Ios Xcode找不到strip-frameworks.sh目录

Ios Xcode找不到strip-frameworks.sh目录,ios,xcode,realm,Ios,Xcode,Realm,我最近将Xcode更新到7.1版,其中包括Swift 2.1。我安装了Swift 2.1,没有任何问题。在尝试运行我的项目后,我意识到我需要获取最新版本的Realm,因为以前的版本不支持Swift 2.1。我删除了旧的框架并导入了realm0.96.2。无论何时运行,现在都会出现以下错误: bash: /Users/userName/Library/Developer/Xcode/DerivedData/appName-ghiroqitgsbvfhdqxsscyokyoouz/Build/Pro

我最近将Xcode更新到7.1版,其中包括Swift 2.1。我安装了Swift 2.1,没有任何问题。在尝试运行我的项目后,我意识到我需要获取最新版本的Realm,因为以前的版本不支持Swift 2.1。我删除了旧的框架并导入了realm0.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
我怀疑问题出在您希望向应用商店提交应用程序所需的脚本上,因此我删除了运行脚本阶段,添加了一个新的阶段,并从Realm documentation站点复制了脚本:

bash "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/Realm.framework/strip-frameworks.sh"
我原以为这会解决问题,但事实并非如此。然后我认为问题可能出在Realm.framework或RealmSwift.framework文件中,所以我删除了它们并重新导入了它们(以防万一我弄糟了什么)。没有什么变化。有人知道这个错误是否有修复程序吗

谢谢!
-CodeIt

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

为了进一步验证,您可以检查选项卡“构建阶段”。它应该如下所示:

注意:确保运行脚本阶段在嵌入框架阶段之后

为什么需要这个脚本? 供应商提供的框架不仅仅是单个可执行文件,实际上是胖二进制文件,它们是不同体系结构上链接的可执行文件的档案。这包括
arm64
armv7
的架构片,它们是在手机上部署所必需的,以及在模拟器中运行应用程序所必需的
i386
x86_64

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

更多细节 该脚本基于构建设置
VALID\u ARCHS
。因为这会更改框架的已签名可执行文件,所以它还需要处理代码签名。自从比特码的引入,它也得到了进一步的后处理。它从框架捆绑包中提取包含的
*.bcsymbolmap
文件,并将它们放入
*.xccarchive
中的正确路径中

对于BCSYMBOLMAP是什么有很好的解释:

BCSymbolMap很像位码的dSYM。Xcode将其作为创建应用程序二进制文件的一部分进行构建,也可以用于每个动态框架。需要对函数/方法名称重新进行符号化,以理解崩溃程序


在我的例子中,更改构建阶段的流程顺序以解决

  • 不好


马吕斯,谢谢你!我从未将框架添加到Embedded Binaries窗格中,现在它可以完美地工作了!一个灯泡在我脑海中熄灭了-脚本中的
${FRAMEWORKS\u FOLDER\u PATH}
是关于嵌入式框架窗格中的框架目标,是吗?是,解析的生成设置
$FRAMEWORKS\u FOLDER\u PATH
配置/引用
$build\u PRODUCTS\u DIR
FRAMEWORKS
目录的相对路径。所以脚本失败了,因为没有将框架复制到正确的位置。这不仅对脚本很重要,而且对发布也很重要,因为动态框架不会成为可执行文件的一部分,它们是分开的,因此必须捆绑在一起,以便在运行时动态加载。构建阶段的顺序至关重要!嵌入框架后剥离框架架构。谢谢你让我认识到这一点@marius@marius我已经确认了所有这些步骤,仍然存在问题中概述的错误。还有什么问题吗?@marius-更新答案,将
运行脚本
步骤放在
嵌入二进制文件
之后,这将是很有帮助的,应该进行检查。我怀疑在升级到最新版本的Realm(或Xcode)的某个阶段,我的
嵌入二进制文件的步骤“神奇地”移到了最后。上一次接触时(几个月前),它的构建是正常的,当它以这种方式破坏时,它非常混乱。剥离框架架构应该在构建阶段选项卡下的嵌入框架之后。你可以用鼠标拖动它(因为它不是很明显)。领域应在其文档中指定此指令@马吕斯帮助澄清了这一点。