使用 Parse 的 iOS SDK pod 子规范

Using Parse's iOS SDK pod subspecs

我正在尝试为 Parse 的 FacebookUtils 框架使用新的(?)CocoaPods 子规范。

pod 的自述文件说:

If you wish to use the Facebook or Twitter utils or ParseUI, you can now leverage Cocoapods 'subspecs'

ruby pod 'Parse/FacebookUtils' pod 'Parse/TwitterUtils' pod 'Parse/UI'

Note that in this case, the Parse framework will contain all headers and classes, so you just have to use:

swift import Parse

objc @import Parse;

并以这种方式导入主要的 Parse 类。但是,Xcode 编译器无法识别子规范 FacebookUtils 和 UI!

它只是说 "PFFacebookUtils" 是一个未声明的标识符。

注意:我在 podfile 的顶部使用 use_frameworks!,这导致我的 "Link Binary With Libraries" 列表中出现 Pods_PROJECT.framework。

我有点迷路了,非常感谢您的帮助。

更新:

我发现问题似乎出在我的 iMessage 扩展的 podfile 部分:

target 'MyApp' do
  pod 'Parse/UI'
  pod 'Parse/FacebookUtils'
end

target 'iMessage App' do
    pod 'Parse/Core'
end

不知何故这导致编译成功,但启动时崩溃并出现错误:

dyld: Symbol not found: _OBJC_CLASS_$_PFFacebookUtils
Referenced from: .../myapp.app/myapp
Expected in: .../MyApp/Frameworks/Parse.framework/Parse

将 FacebookUtils 子规范添加到 iMessage 扩展时,崩溃消失,一切正常...除了 FacebookUtils 包含扩展中不允许的引用 (UIApplication)。 >:U

崩溃是由于 CocoaPods 脚本 Pods-YourProject-frameworks.shParse-Core-FacebookUtils-TwitterUtils/Parse.frameworkParse-Core/Parse.framework 安装到完全相同的位置,有效地覆盖了前者

install_framework "${BUILT_PRODUCTS_DIR}/Parse-Core-FacebookUtils-TwitterUtils/Parse.framework"
install_framework "${BUILT_PRODUCTS_DIR}/Parse-Core/Parse.framework"

我通过在 CocoaPods 运行 脚本

之前添加以下 运行 脚本解决了这个问题
/usr/bin/sed -i '' '/Parse-Core\/Parse.framework/d' "${PODS_ROOT}/Target Support Files/Pods-YourProjectName/Pods-YourProjectName-frameworks.sh"

这从 CocoaPods 脚本中删除了违规行并解决了崩溃问题。

注意:删除 -Core 部分,如果您使用 pod 'Parse' 而不是 pod 'Parse/Core'