将第三方框架链接到我自己的框架(使用迦太基分发)

时间:2019-06-12 13:10:03

标签: ios swift xcode carthage

我们提供了几种不同的专有API作为框架,它们提供了相似的功能。该API当然并不完全相同,因此我们希望围绕这些API构建包装外观框架,因此我们的应用无需关心它们使用的是哪个API。

首先,我创建了一个使用这些API之一的框架,并进行了单元测试以验证其是否按预期工作。我们已将第三方框架二进制文件添加为项目的一部分,并且框架搜索路径如下:

$(inherited)
$(PROJECT_DIR)/Carthage/Build/iOS
$(PROJECT_DIR)

所有非递归。这里是Cartage路径,因为我们在单元测试中使用了Quick和Nimble。我有问题的框架存储在项目根目录。

我们想使用Carthage分发我们的框架,后来又作为Cocoapod分发。

问题是,当我尝试通过命令carthage build --no-skip-current --platform iOS构建我们的框架时,出现错误:

*** Building scheme "Nimble-iOS" in Nimble.xcodeproj
*** Building scheme "Quick-iOS" in Quick.xcworkspace
*** Building scheme "XXX" in XXX.xcodeproj
Build Failed
    Task failed with exit code 65:
    /usr/bin/xcrun xcodebuild -project /Users/andre/Development/yyy/xxx/XXX.xcodeproj -scheme XXX -configuration Release -sdk iphonesimulator -destination platform=iOS\ Simulator,id=AE9E3D9D-BE2C-4AE1-AB37-C6BE8948067B -destination-timeout 3 ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY= CARTHAGE=YES build (launched in /Users/andre/Development/yyy/XXX)

日志包含以下内容:

iphonesimulator/XXX.build/Objects-normal/i386/XXXLockService.o
/Users/andre/Development/yyy/XXX/XXX/LockServiceFactory.swift:7:71: error: 'PinServiceAccessImpl' is unavailable: cannot find Swift declaration for this class
                     case .xxx: return XXXLockService(lockService: PinServiceAccessImpl.getInstance())
                                                                   ^~~~~~~~~~~~~~~~~~~~

PinServiceAccess.PinServiceAccessImpl:2:12: note: 'PinServiceAccessImpl' has been explicitly marked unavailable here
open class PinServiceAccessImpl : NSObject {

从应用程序使用框架时,文档指出我们应将框架添加为嵌入式二进制文件,但是当项目是框架时,此选项不可用。

让我感到困惑的是,单元测试似乎找到了PinServiceAccessImpl.getInstance()!

我猜有一些我不知道的有关链接的细节,这会使构建失败。有谁知道我们错过了什么?

1 个答案:

答案 0 :(得分:0)

将部署目标更新为11.0时,该问题已解决。