我想通过终端命令在.xcodeproj的构建设置中禁用Bitcode.我搜遍了所有但只找到了从终端建立或归档项目的命令.能否请举例说明这个命令是什么样的?
谢谢
在我的一个项目中,我正在集成 paytab ios sdk,同时发生集成错误
a(PayTabCardReaderViewController.o)' 不包含位码。我尝试启用 bitcode=No
但是在启用 bitcode=no 后,它向我显示了更多 40 个错误,有人知道我们可以仅禁用 1 个 sdk/library 的 bitcode 吗?
错误:a(PayTabCardReaderViewController.o)' 不包含位码。您必须在启用位码的情况下重建它(Xcode 设置 ENABLE_BITCODE),从供应商处获取更新的库,或为此目标禁用位码。对于架构 arm64 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
上周我能够将我的ipa上传到iTunesConnect就好了.但截至今天,我通过Application Loader上传时收到以下错误:
ERROR ITMS-90635:"无效的Mach-O格式.捆绑中的Mach-O"Application.app/Frameworks/PSPDFKit.framework"与主捆绑中的Mach-O不一致.主捆绑包Mach-O包含armv7(机器代码)和arm64(机器代码),而嵌套束Mach-O包含armv7(bitcode和机器代码)和arm64(bitcode和机器代码).验证平台的所有目标是否具有一致的值ENABLE_BITCODE构建设置."
我知道这里提出的解决方案: Xcode - 错误ITMS-90635 - 捆绑中的Mach-O无效 - 提交到App Store和许多其他人.
但我不知道如何将任何建议的解决方案应用于Xamarin iOS项目.我没有使用任何pod,而是使用PSPDFKit的Binding库,我已经按照官方文档https://pspdfkit.com/guides/ios/current/other-languages/xamarin/中的描述创建了它.
据我所知,有两种方法让我去,要么在我的项目中启用bitcode(我不知道该怎么做),要么在PSPDFKit的绑定项目中禁用bitcode(我也没有想法如何去做).
我很感激任何帮助或主张.
我正在使用以下命令构建我的 FAT 框架以使用 bitcode进行分发:
xcodebuild -sdk iphoneos CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
xcodebuild -sdk iphonesimulator CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
lipo -create /path/to/iphone/framework /path/to/simulator/framework -output /path/to/universal/framework
我的构建标志是这样的:
但是当我使用 bitcode 将框架集成到不同的项目中并使用以下方法对其进行存档时:
xcodebuild -workspace /path/to/MyApp/app.xcworkspace -scheme app_scheme archive -archivePath /path/to/MyArchive/MyApp.xcarchive | xcpretty
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
? ld: bitcode bundle could not be generated because '/path/to/my/app/Frameworks/MyFramework.framework/MyFramework' was built without full bitcode. All frameworks and dylibs for bitcode must be generated from Xcode Archive or Install build for architecture armv7
? clang: error: linker command failed with exit code 1 …Run Code Online (Sandbox Code Playgroud) 我'Enable Bitcode' set to YES在构建设置中,也尝试过 'fembed-bitcode'在“自定义编译器标志”中进行设置。当我在选择“设备”的情况下构建项目时,并从命令行尝试命令
otool -l /path-Containing-Release-iphoneos/Framework.a | grep bitcode
Run Code Online (Sandbox Code Playgroud)
我得到预期的结果如下
sectname __bitcode.
Run Code Online (Sandbox Code Playgroud)
但是使用相同的构建设置,如果我选择任何模拟器,例如:iPhone6S(10.2) 而不是 Device 并构建项目,并运行相同的命令
otool -l /path-Containing-Release-iphonesimulator/Framework.a | grep bitcode
Run Code Online (Sandbox Code Playgroud)
它在里面找不到任何位码。
这种行为的任何原因?请注意,在选择 Device/Simulator 的情况下构建项目时,Architecture 和 ValidArchitectures 未受影响
我刚刚更新到 Xcode 9.3 并且在将我的应用程序提交到应用程序商店时遇到以下问题:
无效的捆绑包 - 无法处理应用程序,因为在提交中检测到不允许嵌入位代码的选项。您可能没有使用 Xcode 中提供的工具链构建应用程序。使用最新的 GM Xcode 重建整个应用程序并再次提交应用程序。
我已经仔细检查过所有链接到我的项目的框架,并且它们都是在启用位码的情况下编译的。这些框架中只有一个是 Carthage 框架,我确保它是使用carthage update.
我完全被难住了,不知道还能尝试什么。提前感谢您的帮助!
如何在启用 Bitcode 的依赖项上禁用 Bitcode?
这个问题与问题“ Bitcode disabled on Carthage dependency ”相反。不幸的是,虽然OP给出的答案使用了一个很好的技巧,通过删除项目文件中的所有实例,但在丢失的地方添加该行是不适用的。ENABLE_BITCODE = NO;
问题在标题中简单说明。这是我的设置:
构建一个动态框架,可选择链接(弱链接)到 GoogleInteractiveMediaAds.framework。对于使用我的框架的应用程序,GoogleInteractiveMediaAds 是一个可选的依赖项,如果没有它,框架也能正常工作。这是目前工作。
然而,当尝试从位码重建时会出现问题,这通常发生在选择“从位码重建”导出 Ad Hoc 构建时。位码编译过程失败:
ipatool failed with an exception: #<CmdSpec::NonZeroExitException: $/Applications/Xcode.app/Contents/Developer/usr/bin/bitcode-build-tool ...
Run Code Online (Sandbox Code Playgroud)
并深入查看日志文件,我找到了错误描述:
Failed to resolve linkage dependency MyFramework arm64 -> @rpath/GoogleInteractiveMediaAds.framework/GoogleInteractiveMediaAds: Could not resolve @rpath in @rpath/GoogleInteractiveMediaAds.framework/GoogleInteractiveMediaAds from MyFramework
error: GoogleInteractiveMediaAds not found in dylib search path
Run Code Online (Sandbox Code Playgroud)
注意:GoogleInteractiveMediaAds.framework 确实包含位码。
显然,这个错误是通过不选择“从位码重建”来避免的。如果我要回答我自己的问题,我会说,不,看起来从 bitcode 编译时,您不能使用弱链接框架。仅仅是因为 bitcode 编译步骤试图链接到未包含在应用程序目标中的框架。但是,我无法找到任何关于使用位码弱链接的官方文档,或者任何相关的 StackOverflow 答案,所以我不确定我是否遗漏了什么,或者是否有一些相关的编译器/链接器设置我很想让它发挥作用。
目标:从 ELF 二进制文件中提取完整程序(合并)的 LTO 后位码。
该程序恰好是用 Rust 编写的,但我认为这不是一个关键的细节。
我可以.llvmbc使用以下 Cargo 调用将 Rust 程序编译为 ELF 二进制文件,其中包含一个部分:
RUSTFLAGS="-C linker_plugin_lto -C linker=clang -C link-arg=-fuse-ld=lld -C link-arg=-Wl,--plugin-opt=-lto-embed-bitcode=optimized" \
cargo build --release
Run Code Online (Sandbox Code Playgroud)
然后我就可以用来readelf -S | grep llvmbc验证该部分是否存在。确实如此。高超!
我现在想提取完整程序的 LTO 后位码并反汇编它:
$ objcopy target/release/world --dump-section .llvmbc=llvm.bc
$ llvm-dis llvm.bc
LLVM ERROR: Invalid encoding
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Stack dump:
0. Program arguments: llvm-dis llvm.bc
#0 0x000055c06f7ae78c llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/vext01/research/yorick/llvm-project/inst/bin/llvm-dis+0x1b578c)
#1 0x000055c06f7ac6e4 llvm::sys::RunSignalHandlers() (/home/vext01/research/yorick/llvm-project/inst/bin/llvm-dis+0x1b36e4)
#2 …Run Code Online (Sandbox Code Playgroud) 我正在尝试重建启用 Bitcode 的 WebRTC iOS 框架,但它不起作用,它给了我错误。错误消息是
clang++:错误:未知参数:'-ffile-compilation-dir=。'
clang++:错误:-fembed-bitcode 不支持 -gdwarf-aranges
如果我在没有位码启用 true 的情况下构建它,那么它就可以工作。谁能知道为什么我会遇到这个问题?我的Xcode版本是12.5.1
bitcode ×10
ios ×9
llvm ×3
xcode ×2
xcodebuild ×2
arm64 ×1
carthage ×1
command ×1
frameworks ×1
i386 ×1
lld ×1
lto ×1
objective-c ×1
rust ×1
sdk ×1
terminal ×1
weak-linking ×1
webrtc ×1
webrtc-ios ×1
x86-64 ×1
xamarin ×1