xap*_*hod 9 xcode cocoa-touch ios swift watchkit
我的应用程序在设备和模拟器上运行良好,但是当我提交它时,我得到了无效的捆绑包 - 您的应用程序引用的一个或多个动态库不存在于dylib搜索路径错误中,大约在半小时后通过电子邮件发送给我上传成功完成.
按照这里的建议,即运行otool -L,我可以看到应用程序的主可执行文件按预期@rpath/...dylib在Frameworks/文件夹中包含所有文件,但是,appex的可执行文件缺少一些Swift库.
这是otool -Lappex上的输出:
Watch Extension:
/System/Library/Frameworks/WatchKit.framework/WatchKit (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1349.0.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1348.0.0)
/System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 3599.4.0)
/System/Library/Frameworks/WatchConnectivity.framework/WatchConnectivity (compatibility version 1.0.0, current version 116.0.0)
@rpath/libswiftCore.dylib (compatibility version 1.0.0, current version 800.0.46)
@rpath/libswiftCoreGraphics.dylib (compatibility version 1.0.0, current version 800.0.46)
@rpath/libswiftCoreLocation.dylib (compatibility version 1.0.0, current version 800.0.46)
@rpath/libswiftDarwin.dylib (compatibility version 1.0.0, current version 800.0.46)
@rpath/libswiftDispatch.dylib (compatibility version 1.0.0, current version 800.0.46)
@rpath/libswiftFoundation.dylib (compatibility version 1.0.0, current version 800.0.46)
@rpath/libswiftHomeKit.dylib (compatibility version 1.0.0, current version 800.0.46)
@rpath/libswiftObjectiveC.dylib (compatibility version 1.0.0, current version 800.0.46)
@rpath/libswiftSceneKit.dylib (compatibility version 1.0.0, current version 800.0.46)
@rpath/libswiftUIKit.dylib (compatibility version 1.0.0, current version 800.0.46)
@rpath/libswiftWatchKit.dylib (compatibility version 1.0.0, current version 800.0.46)
@rpath/libswiftsimd.dylib (compatibility version 1.0.0, current version 800.0.46)
Run Code Online (Sandbox Code Playgroud)
以下不在Frameworks/文件夹中(但所有其他文件夹都是):
@rpath/libswiftHomeKit.dylib (compatibility version 1.0.0, current version 800.0.46)
@rpath/libswiftSceneKit.dylib (compatibility version 1.0.0, current version 800.0.46)
@rpath/libswiftWatchKit.dylib (compatibility version 1.0.0, current version 800.0.46)
@rpath/libswiftsimd.dylib (compatibility version 1.0.0, current version 800.0.46)
Run Code Online (Sandbox Code Playgroud)
为什么是这样?我通过重新生成我的pods项目pod install,没有改变任何东西.我没有看到任何警告.我检查了build(archive)的日志输出,也没有警告.我怎样才能将它们包括在内?
在我的主应用程序目标中,Always Embed Swift标准库设置为yes.在Watch and Watch Appex目标中,将其设置为no以避免拒绝重复(好).我尝试EMBEDDED_CONTENT_CONTAINS_SWIFT在我的appex中设置为yes,如其他线程所述,但这没有任何区别.
更新1 - 我也无法从xcode组织器导出为ADHOC构建,它在"编译bitcode"步骤中出于同样的原因失败.运行时搜索路径设置如下:
这是导出失败的日志片段,任何想法如何解决这些问题?我看不出为什么缺少这些库.
Debug: Command took 0 seconds
Debug: Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/WatchOS.platform/Developer/SDKs/WatchOS3.0.sdk/System/Library/Frameworks/WatchKit.framework/WatchKit.tbd
Debug: Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/WatchOS.platform/Developer/SDKs/WatchOS3.0.sdk/System/Library/Frameworks/Foundation.framework/Foundation.tbd
Debug: Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/WatchOS.platform/Developer/SDKs/WatchOS3.0.sdk/usr/lib/libobjc.A.tbd
Debug: Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/WatchOS.platform/Developer/SDKs/WatchOS3.0.sdk/usr/lib/libSystem.B.tbd
Debug: Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/WatchOS.platform/Developer/SDKs/WatchOS3.0.sdk/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation.tbd
Debug: Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/WatchOS.platform/Developer/SDKs/WatchOS3.0.sdk/System/Library/Frameworks/UIKit.framework/UIKit.tbd
Debug: Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/WatchOS.platform/Developer/SDKs/WatchOS3.0.sdk/System/Library/Frameworks/WatchConnectivity.framework/WatchConnectivity.tbd
Debug: Found framework/dylib: /Applications/Xcode.app/Contents/Developer/Platforms/WatchOS.platform/Developer/SDKs/WatchOS3.0.sdk/usr/lib/libobjc.A.tbd
Debug: Search Path: ['/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/8.0.0/lib/darwin', '/Applications/Xcode.app/Contents/Developer/Platforms/WatchOS.platform/Developer/SDKs/WatchOS3.0.sdk/usr/lib', '/Applications/Xcode.app/Contents/Developer/Platforms/WatchOS.platform/Developer/SDKs/WatchOS3.0.sdk/System/Library/Frameworks']
error: libswiftCore.dylib not found in dylib search path
Stderr:
from /Applications/Xcode.app/Contents/Developer/usr/bin/ipatool:1974:in `block in CompileOrStripBitcodeInBundle'
from /Applications/Xcode.app/Contents/Developer/usr/bin/ipatool:1931:in `each'
from /Applications/Xcode.app/Contents/Developer/usr/bin/ipatool:1931:in `CompileOrStripBitcodeInBundle'
from /Applications/Xcode.app/Contents/Developer/usr/bin/ipatool:1921:in `block in CompileOrStripBitcodeInBundle'
from /Applications/Xcode.app/Contents/Developer/usr/bin/ipatool:1920:in `each'
from /Applications/Xcode.app/Contents/Developer/usr/bin/ipatool:1920:in `CompileOrStripBitcodeInBundle'
from /Applications/Xcode.app/Contents/Developer/usr/bin/ipatool:2106:in `ProcessIPA'
from /Applications/Xcode.app/Contents/Developer/usr/bin/ipatool:2674:in `<main>'
2016-09-14 15:33:40 +0000 /Applications/Xcode.app/Contents/Developer/usr/bin/ipatool exited with 1
2016-09-14 15:33:40 +0000 ipatool JSON: {
alerts = (
{
code = 2554;
description = "Configuration issue: platform AppleTVSimulator.platform doesn't have any non-simulator SDKs; ignoring it";
info = {
};
level = WARN;
},
{
code = 2554;
description = "Configuration issue: platform iPhoneSimulator.platform doesn't have any non-simulator SDKs; ignoring it";
info = {
};
level = WARN;
},
{
code = 2554;
description = "Configuration issue: platform WatchSimulator.platform doesn't have any non-simulator SDKs; ignoring it";
info = {
};
level = WARN;
},
{
code = 284;
description = "Failed to resolve linkage dependency Watch Extension armv7k -> @rpath/libswiftCore.dylib: Could not find image to link for armv7k in /private/var/folders/yl/mw_r1p4j3vj2mfp32rqs0y7r0000gn/T/XcodeDistPipeline.6Tu/Root/Payload/Photobooth.app/Frameworks/libswiftCore.dylib";
info = {
};
level = WARN;
},
{
code = 284;
description = "Failed to resolve linkage dependency Watch Extension armv7k -> @rpath/libswiftCoreGraphics.dylib: Could not find image to link for armv7k in /private/var/folders/yl/mw_r1p4j3vj2mfp32rqs0y7r0000gn/T/XcodeDistPipeline.6Tu/Root/Payload/Photobooth.app/Frameworks/libswiftCoreGraphics.dylib";
info = {
};
level = WARN;
},
{
code = 284;
description = "Failed to resolve linkage dependency Watch Extension armv7k -> @rpath/libswiftCoreLocation.dylib: Could not find image to link for armv7k in /private/var/folders/yl/mw_r1p4j3vj2mfp32rqs0y7r0000gn/T/XcodeDistPipeline.6Tu/Root/Payload/Photobooth.app/Frameworks/libswiftCoreLocation.dylib";
info = {
};
level = WARN;
},
{
code = 284;
description = "Failed to resolve linkage dependency Watch Extension armv7k -> @rpath/libswiftDarwin.dylib: Could not find image to link for armv7k in /private/var/folders/yl/mw_r1p4j3vj2mfp32rqs0y7r0000gn/T/XcodeDistPipeline.6Tu/Root/Payload/Photobooth.app/Frameworks/libswiftDarwin.dylib";
info = {
};
level = WARN;
},
{
code = 284;
description = "Failed to resolve linkage dependency Watch Extension armv7k -> @rpath/libswiftDispatch.dylib: Could not find image to link for armv7k in /private/var/folders/yl/mw_r1p4j3vj2mfp32rqs0y7r0000gn/T/XcodeDistPipeline.6Tu/Root/Payload/Photobooth.app/Frameworks/libswiftDispatch.dylib";
info = {
};
level = WARN;
},
{
code = 284;
description = "Failed to resolve linkage dependency Watch Extension armv7k -> @rpath/libswiftFoundation.dylib: Could not find image to link for armv7k in /private/var/folders/yl/mw_r1p4j3vj2mfp32rqs0y7r0000gn/T/XcodeDistPipeline.6Tu/Root/Payload/Photobooth.app/Frameworks/libswiftFoundation.dylib";
info = {
};
level = WARN;
},
{
code = 284;
description = "Failed to resolve linkage dependency Watch Extension armv7k -> @rpath/libswiftHomeKit.dylib: Could not resolve @rpath in @rpath/libswiftHomeKit.dylib from Watch Extension";
info = {
};
level = WARN;
},
{
code = 284;
description = "Failed to resolve linkage dependency Watch Extension armv7k -> @rpath/libswiftObjectiveC.dylib: Could not find image to link for armv7k in /private/var/folders/yl/mw_r1p4j3vj2mfp32rqs0y7r0000gn/T/XcodeDistPipeline.6Tu/Root/Payload/Photobooth.app/Frameworks/libswiftObjectiveC.dylib";
info = {
};
level = WARN;
},
{
code = 284;
description = "Failed to resolve linkage dependency Watch Extension armv7k -> @rpath/libswiftSceneKit.dylib: Could not resolve @rpath in @rpath/libswiftSceneKit.dylib from Watch Extension";
info = {
};
level = WARN;
},
{
code = 284;
description = "Failed to resolve linkage dependency Watch Extension armv7k -> @rpath/libswiftUIKit.dylib: Could not find image to link for armv7k in /private/var/folders/yl/mw_r1p4j3vj2mfp32rqs0y7r0000gn/T/XcodeDistPipeline.6Tu/Root/Payload/Photobooth.app/Frameworks/libswiftUIKit.dylib";
info = {
};
level = WARN;
},
{
code = 284;
description = "Failed to resolve linkage dependency Watch Extension armv7k -> @rpath/libswiftWatchKit.dylib: Could not resolve @rpath in @rpath/libswiftWatchKit.dylib from Watch Extension";
info = {
};
level = WARN;
},
{
code = 284;
description = "Failed to resolve linkage dependency Watch Extension armv7k -> @rpath/libswiftsimd.dylib: Could not resolve @rpath in @rpath/libswiftsimd.dylib from Watch Extension";
info = {
};
level = WARN;
},
Run Code Online (Sandbox Code Playgroud)
xap*_*hod 17
花了12个小时来解决这个问题,但这就是修复它的原因 - 更改 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES构建设置如下:
应用目标(主要目标) - 设置为NO(我的是YES)
观察目标 - 设置为YES(我的是没有)
观看应用扩展目标 - 设置为NO(我的是的)
编辑:我通过在xcode 8中创建一个新的空的监视项目来解决这个问题,并交叉引用新的xcode 8模板项目中的构建设置与我脆弱的古老项目之间的差异.上面的设置是xcode 8模板项目的设置.
我想详细介绍一下我在此问题上的经验,以期希望其他人遇到这个问题时可以节省一些时间。
背景:
@xaphod缺少库,当我运行时otool -L,每个目标中的所有库看起来都是正确的。
经过许多拒绝的二进制文件之后,我终于:
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES 主要应用目标 = $(inherited)每个可可豆荚警告建议。默认为YES,实际上显示为YES - $(inherited)Xcode。最后,EMBEDDED_CONTENT_CONTAINS_SWIFT = YES按每个广告连播设置为您提供哪些广告连播
观看应用 =YES
手表扩展名 =NO
今天扩展 =NO
在进行上述设置之前,我尝试$(inherited)了所有使可可豆荚开心的事情。这显然是一个糟糕的生活决定。
我终于发现尝试导出,因为AD HOC如果iTunes Connect不接受该二进制文件,将会失败,因此我可以节省测试理论的时间,然后再将构建版本扔给Apple。我试图将一个成功的二进制文件与一个失败的二进制文件进行比较,但实际上并没有发现任何特别的东西对我而言有什么区别。
我仍然不满意如何工作,但很高兴我终于可以上传二进制文件了。干杯,祝你好运!
| 归档时间: |
|
| 查看次数: |
3364 次 |
| 最近记录: |