将 Swift 类添加到旧 Xcode 项目后,我收到此错误。
dyld: Library not loaded: @rpath/libswift_stdlib_core.dylib
我怎样才能让项目再次运行?
otool
进行调试
对我来说,以前的解决方案都没有奏效。我们发现 Build Settings 中有一个标志 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES
(在早期版本中:“Embedded Content Contains Swift Code”)需要设置为 YES。默认为否!
如果在将 Objective-C 项目转换为开始使用 Swift 期间出现问题,则可能会发生此错误。问题是链接器构建设置从未正确配置,因此您必须手动完成。查找 Runpath Search Paths 构建设置并将其设置为:
$(inherited) @executable_path/Frameworks
https://i.stack.imgur.com/d6l8O.png
编辑:我还应该补充一点,最近出现了大量完全由其他原因引起的错误——Apple 对 Swift 本身进行了更改,可能从 Xcode 6.1 或 6.1.1 开始。唯一的解决方案似乎是退出 Xcode,在 Keychain Access 中销毁您的证书,转到会员中心并删除所有证书和配置文件(商店中应用程序的配置文件除外 - 您无法删除它们),然后启动从头开始的整个证书申请过程。
我不太确定为什么这个问题被否决了,当我第一次尝试将 Swift 用于现有项目时,我也遇到了这个问题。 Xcode 重启也为我解决了这个问题。
我在这个问题上搜索了很长时间。导致此问题的原因有多种。
如果您在 Objectice C 项目中遇到 Swift 代码/库时,您应该尝试解决方案 1-2-3
如果你在一个新的 Swift 项目中遇到这个问题,解决方案 4 最适合你。
解决方案1:
重启 Xcode,然后重启电脑和 iPhone
解决方案2:
转到项目构建设置并将 Always Embed Swift Standard Libraries
(以前为 Embedded Content Contains Swift Code
)标志设置为 YES
解决方案3:
转到项目构建设置并将 @executable_path/Frameworks
添加到 Runpath Search Paths
选项
解决方案4:
如果以上都不起作用,这应该。如 AirSign's post 中所述,Apple 似乎是 ninja 修补证书
在内部证书
Subject: UID=269J2W3P2L, CN=iPhone Distribution: Company Name, O=Company Name, C=FR
他们添加了一个名为 OU 的新字段
Subject: UID=269J2W3P2L, CN=iPhone Distribution: Company Name, OU=269J2W3P2L, O=Company Name, C=FR
所以你应该重新创建证书和配置
@executable_path/../Frameworks
,而 iOS 项目需要它,而中间没有 ..
。如果您已将目标从一个操作系统转换到另一个操作系统,则更改此值很重要。
就我而言,我试图导入自定义框架并遇到类似的错误。原来我必须在嵌入式二进制文件中导入框架,而不是在链接框架和库中。
嵌入式二进制文件位于 Projects Settings -> -> General
对于在 Adhoc/Enterprise 发行版中遇到此问题的开发人员,
从开发门户创建生产证书,然后重新生成分发配置文件。在您的 Mac 上下载并安装它们。确保您在 Xcode 构建设置中选择了正确的配置文件并重新构建您的应用程序。
来源:https://devforums.apple.com/message/1022908#1022908
解决方案 5:
就我而言,accfews 的答案中提到的所有解决方案都非常有帮助,但没有一个奏效。我通过在项目目标的“常规”部分的“嵌入式二进制文件”部分添加我的 swift 库来解决我的问题。也许这是因为我在我的工作区中包含了我的 swift 框架?不管它现在编译什么!准备好斯威夫特,我来了!
Xcode 的简单重启为我解决了这个问题。
对我来说,问题是由于我的 Apple 全球开发者关系认证中心无效。
从这里下载:https://developer.apple.com/certificationauthority/AppleWWDRCA.cer
将其拖放到 Keychain Access 中,清理项目并运行。
我有一个 Obj-C 项目,我开始添加 swift 源文件。以下为我解决了这个问题:
链接:RUNPATH SEARCH PATHS = $(inherited) @executable_path/Frameworks Swift 编译器 - 代码生成:嵌入内容包含 SWIFT = YES
我刚刚从模板 Xcode 6.3 创建了一个新项目,并将项目设置与我的旧原始项目进行了比较。
尝试按住 Alt,然后转到 Product -> Clean Build Folder...
希望它会帮助某人..
发生这种情况的原因是多方面的。刚刚度过了一个有趣的周末,发现了另一个导致此问题的问题(代码签名的顺序),我想创建一个汇总答案,将所有可能的解决方案结合在一起:
将包含 Swift 代码的嵌入内容添加到项目中。如果您的应用包含 Swift 代码,则需要设置此标志。清洁项目。除了 Project > Clean 之外,您还可以删除 DerivedData 和 Build 目录。在 Preferences 下查看 DerivedData 的位置。构建应该在您的项目文件夹中。确保运行路径搜索路径包含 @executable_path/Frameworks。确保您的证书在 OU(组织单位)字段中包含您的 Apple Team ID,Apple 将为您添加此证书,只需撤销您现有的分发证书并创建一个新证书,下载,安装在 KeyChain 上,重新生成所有配置文件,下载这些和重建。 Xcode 重启。如果一切基本上都很好,但 Xcode 还没有到达那里。
那是容易的事。如果您正在执行自己的命令行构建,您可能会创建自己的 .ipa
文件以进行上传。在这种情况下,您需要确保以下内容:
确保 SwiftSupport/iphoneos 中的 Swift 文件版本与 Contents/YourApp.app/Frameworks 中的版本相同 因为 Swift 尚未在版本之间进行二进制兼容,所以您必须确保这些版本是您构建应用程序时使用的版本.您可以在 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos 下找到这些库。首先对库和框架进行签名。您需要先对库和框架文件(在 .app 文件夹中的 Frameworks 下)进行代码签名,然后对整个 .app 树进行签名。 .app 树必须使用 entitlements.plist 而不是框架进行签名。
希望当 Swift 3.0 发布时,我们不再需要将 Swift 与我们的应用程序捆绑在一起,这整个问题都会消失。
我在使用带有生产证书的 Ad Hoc(或企业)移动设备时遇到了这个问题。切换到开发证书和 mobileprovision 解决了这个问题。
我的项目是一个带有一些 Objective-C 类的 Swift 项目。使用旧的内部(企业)证书签名时,我遇到了同样的问题。
以下步骤为我解决了这个问题。
创建和使用新的证书和移动配置。 (参考 AIRSIGN 的博客)将 Runpath Search Paths 构建设置设置为:$(inherited) @executable_path/Frameworks。 (参考马特的回答)
解决方案 6:
在我们的案例中,企业分销证书已被吊销。生成新证书并更新配置文件解决了该问题。
(这个错误似乎有很多不同的原因。希望这对某人有所帮助。)
我尝试了上面给出的所有答案,没有任何效果。
更新到优胜美地后终于工作了
我遇到了同样的问题,设置正确的代码签名身份解决了这个问题(构建设置->代码签名身份)。
根据 Apple technical question“在 iOS 8 发布后创建的所有企业和标准 iOS 开发人员证书在适当的位置都有新的团队 ID 字段,以允许 Swift 语言应用程序运行”
如果您通过嵌入式二进制文件添加这三个框架,它们也将被添加到链接框架和库中。删除 Linked Frameworks and Libraries 中的三个条目将解决问题。
重新启动 Xcode 和重新启动 Mac 之类的魔术方法对我不起作用。
将框架添加为“嵌入式二进制”而不仅仅是“链接框架和库” - 修复了我的问题。
我还将 Embedded Content Contains Swift Code 标志设置为 YES。
升级到最新版本的 OS X (Yosemite)
经过数小时的反复试验,我终于解决了这个问题。 - 如果这当然适用于您的情况。
在我将 Mac OS X 从 Mavericks 升级到 Yosemite 之前,我遇到了同样的问题。 - 它解决了我的问题,希望它也能解决你的问题
我尝试了在网上找到的所有解决方案,包括 Apple 和新证书。没有成功。
经过 6 个月的尝试,我可以运行 xcode 的唯一方法是在我的 macbook 上创建一个新帐户。
如果您将此库添加到构建阶段的“复制文件”部分,通常此错误会消失。
我的环境:Cocos2d 2.0、Box2d、Objective C
除了上面的其他答案之外,我最后去了 General 选项卡并使 WatchKit 成为 Optional。
https://i.stack.imgur.com/J2TOW.png
如果以上所有方法都对您没有帮助,并且您真的很沮丧...尝试所有技巧中的最佳技巧:Clean
并确保也Clean Build Folder
。 :) 希望它可以帮助某人!
这些解决方案似乎都没有一直对我有用。每成功运行几次后,它就会再次失败。 “嵌入式内容包含 Swift 代码”标志对我来说始终设置为 YES。
结果我将 Xcode 设置为与 6.3 兼容。将其改回兼容 3.2 解决了它:
https://i.stack.imgur.com/1hGxh.png
我也遇到过这个问题,只是没有找到 libswiftXCTest.dylib
。
解决方案是将 XCTest.framework
添加到 Build Phases/Link Binary with Library
中的 Tests 目标。即使在尝试构建主要目标时,我也收到此错误。
当我使用 Swift 语言向旧项目添加新的 Today 扩展目标时,这种情况就出现了。通过将项目更新为推荐设置轻松修复。 Xcode 6.0.1
我使用 Mavericks,Xcode 6.1.1,在带有 iOS 8.1.1 的 iPhone5 上测试时遇到了同样的问题。我尝试了所有可能的解决方案,包括新证书和配置文件,但没有任何帮助。我在项目级别和目标级别对 Embedded Content Contains Swift Code
和 Runpath Search Paths
进行了更改。
我现在已经安装了 Yosemite,没有任何进一步的更改,它就开始工作了。
同样的问题,对我来说,是 Crashlytics/Fabric/Beta/Twitter/Whatever-they-call-themselves 上传了一个缺少嵌入式框架的二进制文件。如果我制作了一个存档,然后以标准方式导出了 Enterprise 版本,它们就很有魅力。
经过几个月和几个月的在这里尝试一切......精神错乱的定义......在新的Mac用户下启动Xcode为我解决了这个问题。
我删除了 ~/Library/Developer/* 并重新安装了 Xcode- 所以不知道还有什么格式可以使它工作。