iOS 带框架的应用程序在设备上崩溃,dyld:找不到符号,Xcode 8
iOS app with framework crashed on device, dyld: Symbol not found, Xcode 8
我在 Swift 3.0 中开始了新的空项目并尝试使用 RxAlamofire
。我将 Carthage
用于依赖库 (tutorial),但我得到了框架崩溃和消息:
dyld: Symbol not found: __TMp7RxSwift18ReactiveCompatible
Referenced from: /Users/michu/Library/Developer/CoreSimulator/Devices/7249C3ED-2CBC-41E4-A66D-BBC010CD70CD/data/Containers/Bundle/Application/B625B9D2-687C-4703-A6BF-C9E5F8861F44/recipemaster.app/Frameworks/RxAlamofire.framework/RxAlamofire
Expected in: /Users/michu/Library/Developer/CoreSimulator/Devices/7249C3ED-2CBC-41E4-A66D-BBC010CD70CD/data/Containers/Bundle/Application/B625B9D2-687C-4703-A6BF-C9E5F8861F44/recipemaster.app/Frameworks/RxSwift.framework/RxSwift
in /Users/michu/Library/Developer/CoreSimulator/Devices/7249C3ED-2CBC-41E4-A66D-BBC010CD70CD/data/Containers/Bundle/Application/B625B9D2-687C-4703-A6BF-C9E5F8861F44/recipemaster.app/Frameworks/RxAlamofire.framework/RxAlamofire
我不知道哪里可能有问题。下面一般配置
以我为例:
- 在 "Linked Frameworks an Libraries" 下查找 Foundation.framework,select 它并按按钮上的减号 ('-') 以删除此框架。
- 现在按加号 ('+') 并搜索 Foundation.framework - 重新添加它,它应该可以解决您的崩溃问题。
取自迦太基 github
“如果您正在为 iOS、tvOS 或 watchOS
构建
创建一个 Cartfile,列出您要在项目中使用的框架。
运行迦太基更新。这会将依赖项提取到 Carthage/Checkouts 文件夹中,然后构建每个依赖项。
在您的应用程序目标的“常规”设置选项卡上,在“链接的框架和库”部分中,从磁盘上的 Carthage/Build 文件夹中拖放您要使用的每个框架.
在应用程序目标的“Build Phases”设置选项卡上,单击“+”图标并选择“New 运行 Script Phase”。创建一个 运行 脚本,在其中指定 shell(例如:bin/sh),将以下内容添加到 shell 下方的脚本区域:
/usr/local/bin/carthage 复制框架
并在“输入文件”下添加您要使用的框架的路径,例如:
$(SRCROOT)/Carthage/Build/iOS/Box.framework
$(SRCROOT)/Carthage/Build/iOS/Result.framework
$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework
"
https://github.com/Carthage/Carthage#if-youre-building-for-ios-tvos-or-watchos
我在 Swift 3.0 中开始了新的空项目并尝试使用 RxAlamofire
。我将 Carthage
用于依赖库 (tutorial),但我得到了框架崩溃和消息:
dyld: Symbol not found: __TMp7RxSwift18ReactiveCompatible
Referenced from: /Users/michu/Library/Developer/CoreSimulator/Devices/7249C3ED-2CBC-41E4-A66D-BBC010CD70CD/data/Containers/Bundle/Application/B625B9D2-687C-4703-A6BF-C9E5F8861F44/recipemaster.app/Frameworks/RxAlamofire.framework/RxAlamofire
Expected in: /Users/michu/Library/Developer/CoreSimulator/Devices/7249C3ED-2CBC-41E4-A66D-BBC010CD70CD/data/Containers/Bundle/Application/B625B9D2-687C-4703-A6BF-C9E5F8861F44/recipemaster.app/Frameworks/RxSwift.framework/RxSwift
in /Users/michu/Library/Developer/CoreSimulator/Devices/7249C3ED-2CBC-41E4-A66D-BBC010CD70CD/data/Containers/Bundle/Application/B625B9D2-687C-4703-A6BF-C9E5F8861F44/recipemaster.app/Frameworks/RxAlamofire.framework/RxAlamofire
我不知道哪里可能有问题。下面一般配置
以我为例:
- 在 "Linked Frameworks an Libraries" 下查找 Foundation.framework,select 它并按按钮上的减号 ('-') 以删除此框架。
- 现在按加号 ('+') 并搜索 Foundation.framework - 重新添加它,它应该可以解决您的崩溃问题。
取自迦太基 github
“如果您正在为 iOS、tvOS 或 watchOS
构建创建一个 Cartfile,列出您要在项目中使用的框架。
运行迦太基更新。这会将依赖项提取到 Carthage/Checkouts 文件夹中,然后构建每个依赖项。
在您的应用程序目标的“常规”设置选项卡上,在“链接的框架和库”部分中,从磁盘上的 Carthage/Build 文件夹中拖放您要使用的每个框架.
在应用程序目标的“Build Phases”设置选项卡上,单击“+”图标并选择“New 运行 Script Phase”。创建一个 运行 脚本,在其中指定 shell(例如:bin/sh),将以下内容添加到 shell 下方的脚本区域:
/usr/local/bin/carthage 复制框架
并在“输入文件”下添加您要使用的框架的路径,例如:
$(SRCROOT)/Carthage/Build/iOS/Box.framework
$(SRCROOT)/Carthage/Build/iOS/Result.framework
$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework
"
https://github.com/Carthage/Carthage#if-youre-building-for-ios-tvos-or-watchos