什么是 libswiftRemoteMirror.dylib 以及为什么它包含在我的应用程序包中?
What is libswiftRemoteMirror.dylib and why is it being included in my app bundle?
我有一个 iOS 应用程序,我最近已切换到 Xcode 8。
作为其中的一部分,我们从 swift 2.2 切换到 2.3(swift 3 稍后会出现)。
我有一个自动构建管道,它基本上运行 xcodebuild
以在专用构建机器上生成发布二进制文件,在我整理完所有这些之后(Xcode 8 的自动代码签名真的搞砸了),现在当我将我的应用程序上传到 iTunes connect 时,它失败并出现此错误:
ERROR ITMS-90171: "Invalid Bundle Structure - The binary file 'MyApp.app/libswiftRemoteMirror.dylib' is not permitted. Your app can't contain standalone executables or libraries, other than the CFBundleExecutable of supported bundles. Refer to the Bundle Programming Guide at https://developer.apple.com/go/?id=bundle-structure for information on the iOS app bundle structure."
果然,如果我解压 .ipa 文件并查看,那里有 libswiftRemoteMirror.dylib
。
如果我通过 Xcode 为 iTunes archive/export,那么它会生成一个没有 libswiftRemoteMirror.dylib
的应用程序包,但是我的应用程序的所有其他版本似乎都有它。即使只是在 Xcode 中进行调试构建,然后查看输出显示 libswiftRemoteMirror.dylib 位于我的应用程序包中,表明 Xcode 本身肯定将其放在那里,而不是任何部分我的自动构建脚本。
这个文件是什么,为什么要放在那里,我应该怎么办?
我可以修改我的构建脚本以删除发布构建的这个文件,但我担心这可能会影响代码签名过程。无论如何我都会尝试一下,看看会发生什么,但感觉这不是正确的做法。
如有任何建议,我们将不胜感激。
我运行在安装Xcode8后遇到了同样的问题,通过shenzhen.
构建
我决定看看 Fastlane as an alternative, and their gym
程序生成一个可以提交给 Apple 的 ipa。
我很容易将对 ipa
(深圳的可执行文件)的调用替换为对 gym
的调用,其余的构建和上传脚本无需修改即可运行。
如果您更喜欢直接构建,我从 gym
自述文件中提取了以下内容。它生成一个 .xcarchive
,其中包含一个没有 libswiftRemoteMirror.dylib
的 .app
文件。我自己不使用那种流程,所以我不能说你会如何从那里开始。
xcodebuild \
-scheme Scheme \
-workspace Project.xcworkspace \
-configuration 'Release' \
-destination 'generic/platform=iOS' \
-archivePath './Output.xcarchive' \
archive
我永远无法让命令行 xcodebuild 与自动代码签名一起工作。我假设是因为自动构建机器 运行s 作为一个不同的帐户,只能通过 SSH 访问 - 它从来没有 "full" Xcode 运行 作为该用户帐户,它没有它的登录钥匙串或类似的东西中没有任何证书。
我不想使用 shenzhen
之类的东西,因为过去我对这类事情只有糟糕的经历。 Xcode 构建系统足够复杂和脆弱,无需添加更多脚本和可能出错或过时的东西。
这是我最终解决问题的方法(这太可怕了,但这是我能找到的唯一使它最终起作用的方法)
在自动构建脚本中,编辑 .pbxproj
以搜索并将 Provisioning Style = Automatic;
替换为 Provisioning Style = Manual;
。还要将 iOS Developer
替换为 iOS Distribution
以用于同一 pbxproj 文件中的代码签名内容。这两个东西关闭自动签名
运行 xcodebuild
以我在 Xcode7 中所做的相同方式构建(但不存档)项目。 Xcode 编译应用程序并对其进行签名,但它还无效,因为它包含 libswiftRemoteMirror.dylib
并且由于某种原因还没有任何权利文件
从应用程序包中删除 libswiftRemoteMirror.dylib
(这会使签名无效)
通过从配置文件中提取授权位,在应用程序包文件夹中生成一个 Entitlements.plist
(就像 BlackBerry's SWSiOSResign.sh 脚本所做的那样)
使用 codesign --entitlements <file>
重新签署应用程序包
从那里,使用与 bq/package_ipa.sh
类似的技术并复制 SwiftSupport 文件夹,然后将文件压缩到 ipa
.
我实际上不能使用 package_ipa.sh
文件,我需要重新实现类似的逻辑,因为我需要引用 Swift_2.3.toolchain
来获取 SwiftSupport,因为我的应用程序仍然是 swift 2.3 - 不是 XcodeDefault.toolchain
(这是 swift 3)
看来我应该能够将 xcodebuild --archive
与其他一些东西结合使用来避免其中的一些步骤。我永远无法让它在 Xcode7 下工作,但如果我有时间,我可能会用 XC8 再试一次
在我的例子中,我得到了错误 ITMS-90171,因为我使用的是自定义框架。
"Invalid Bundle Structure - The binary file 'MyFramework.framework/libswiftRemoteMirror.dylib'
(我的申请没拿到。)
我试过健身房but it got stuck at xcrun。所以我尝试在我拥有的每个自定义框架的构建短语中执行 rm -rf libswiftRemoteMirror
(使用自定义 运行-脚本),有趣的是我没有破坏任何东西:它有效。
只需转到构建设置并按原样操作,您的问题就会解决。
只需从 Xcode 存档您的构建 右键单击存档文件 -> 在查找器中显示 -> 右键单击 -> 显示包内容 -> 产品 -> 应用程序 -> 复制 .app 文件生成负载并上传使用应用程序加载器。
它对我的情况有帮助。
最近开始在我们的项目中使用 Swift,但遇到了同样的错误。
为了找到根本原因,我只是在 XCode.app 中做了 'grep -Ril "libswiftRemoteMirror" .'(我目前有 10.1)并找到了 ./Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/XCLanguageSupport.[=26= .xcspec 文件。它说:
// SWIFT_RESOURCE_DESTINATION and SWIFT_RESOURCE_LIBRARY allow us to copy
// libswiftRemoteMirror.dylib into place so that memory debugging tools have access to it
// on device.
// We disable these options in "DEPLOYMENT" modes, so that the libswiftRemoteMirror.dylib
// does not make its way into archives submitted to the App Store.
所以解决方案很简单 - 在 XCode 目标设置中将部署后处理设置为是 用于您的发布配置(或您用于构建的任何内容)
我有一个 iOS 应用程序,我最近已切换到 Xcode 8。 作为其中的一部分,我们从 swift 2.2 切换到 2.3(swift 3 稍后会出现)。
我有一个自动构建管道,它基本上运行 xcodebuild
以在专用构建机器上生成发布二进制文件,在我整理完所有这些之后(Xcode 8 的自动代码签名真的搞砸了),现在当我将我的应用程序上传到 iTunes connect 时,它失败并出现此错误:
ERROR ITMS-90171: "Invalid Bundle Structure - The binary file 'MyApp.app/libswiftRemoteMirror.dylib' is not permitted. Your app can't contain standalone executables or libraries, other than the CFBundleExecutable of supported bundles. Refer to the Bundle Programming Guide at https://developer.apple.com/go/?id=bundle-structure for information on the iOS app bundle structure."
果然,如果我解压 .ipa 文件并查看,那里有 libswiftRemoteMirror.dylib
。
如果我通过 Xcode 为 iTunes archive/export,那么它会生成一个没有 libswiftRemoteMirror.dylib
的应用程序包,但是我的应用程序的所有其他版本似乎都有它。即使只是在 Xcode 中进行调试构建,然后查看输出显示 libswiftRemoteMirror.dylib 位于我的应用程序包中,表明 Xcode 本身肯定将其放在那里,而不是任何部分我的自动构建脚本。
这个文件是什么,为什么要放在那里,我应该怎么办? 我可以修改我的构建脚本以删除发布构建的这个文件,但我担心这可能会影响代码签名过程。无论如何我都会尝试一下,看看会发生什么,但感觉这不是正确的做法。
如有任何建议,我们将不胜感激。
我运行在安装Xcode8后遇到了同样的问题,通过shenzhen.
构建我决定看看 Fastlane as an alternative, and their gym
程序生成一个可以提交给 Apple 的 ipa。
我很容易将对 ipa
(深圳的可执行文件)的调用替换为对 gym
的调用,其余的构建和上传脚本无需修改即可运行。
如果您更喜欢直接构建,我从 gym
自述文件中提取了以下内容。它生成一个 .xcarchive
,其中包含一个没有 libswiftRemoteMirror.dylib
的 .app
文件。我自己不使用那种流程,所以我不能说你会如何从那里开始。
xcodebuild \
-scheme Scheme \
-workspace Project.xcworkspace \
-configuration 'Release' \
-destination 'generic/platform=iOS' \
-archivePath './Output.xcarchive' \
archive
我永远无法让命令行 xcodebuild 与自动代码签名一起工作。我假设是因为自动构建机器 运行s 作为一个不同的帐户,只能通过 SSH 访问 - 它从来没有 "full" Xcode 运行 作为该用户帐户,它没有它的登录钥匙串或类似的东西中没有任何证书。
我不想使用 shenzhen
之类的东西,因为过去我对这类事情只有糟糕的经历。 Xcode 构建系统足够复杂和脆弱,无需添加更多脚本和可能出错或过时的东西。
这是我最终解决问题的方法(这太可怕了,但这是我能找到的唯一使它最终起作用的方法)
在自动构建脚本中,编辑
.pbxproj
以搜索并将Provisioning Style = Automatic;
替换为Provisioning Style = Manual;
。还要将iOS Developer
替换为iOS Distribution
以用于同一 pbxproj 文件中的代码签名内容。这两个东西关闭自动签名运行
xcodebuild
以我在 Xcode7 中所做的相同方式构建(但不存档)项目。 Xcode 编译应用程序并对其进行签名,但它还无效,因为它包含libswiftRemoteMirror.dylib
并且由于某种原因还没有任何权利文件从应用程序包中删除
libswiftRemoteMirror.dylib
(这会使签名无效)通过从配置文件中提取授权位,在应用程序包文件夹中生成一个
Entitlements.plist
(就像 BlackBerry's SWSiOSResign.sh 脚本所做的那样)使用
codesign --entitlements <file>
重新签署应用程序包
从那里,使用与
bq/package_ipa.sh
类似的技术并复制 SwiftSupport 文件夹,然后将文件压缩到ipa
.
我实际上不能使用 package_ipa.sh
文件,我需要重新实现类似的逻辑,因为我需要引用 Swift_2.3.toolchain
来获取 SwiftSupport,因为我的应用程序仍然是 swift 2.3 - 不是 XcodeDefault.toolchain
(这是 swift 3)
看来我应该能够将 xcodebuild --archive
与其他一些东西结合使用来避免其中的一些步骤。我永远无法让它在 Xcode7 下工作,但如果我有时间,我可能会用 XC8 再试一次
在我的例子中,我得到了错误 ITMS-90171,因为我使用的是自定义框架。
"Invalid Bundle Structure - The binary file 'MyFramework.framework/libswiftRemoteMirror.dylib'
(我的申请没拿到。)
我试过健身房but it got stuck at xcrun。所以我尝试在我拥有的每个自定义框架的构建短语中执行 rm -rf libswiftRemoteMirror
(使用自定义 运行-脚本),有趣的是我没有破坏任何东西:它有效。
只需转到构建设置并按原样操作,您的问题就会解决。
只需从 Xcode 存档您的构建 右键单击存档文件 -> 在查找器中显示 -> 右键单击 -> 显示包内容 -> 产品 -> 应用程序 -> 复制 .app 文件生成负载并上传使用应用程序加载器。 它对我的情况有帮助。
最近开始在我们的项目中使用 Swift,但遇到了同样的错误。
为了找到根本原因,我只是在 XCode.app 中做了 'grep -Ril "libswiftRemoteMirror" .'(我目前有 10.1)并找到了 ./Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/XCLanguageSupport.[=26= .xcspec 文件。它说:
// SWIFT_RESOURCE_DESTINATION and SWIFT_RESOURCE_LIBRARY allow us to copy
// libswiftRemoteMirror.dylib into place so that memory debugging tools have access to it
// on device.
// We disable these options in "DEPLOYMENT" modes, so that the libswiftRemoteMirror.dylib
// does not make its way into archives submitted to the App Store.
所以解决方案很简单 - 在 XCode 目标设置中将部署后处理设置为是 用于您的发布配置(或您用于构建的任何内容)