Связывание сторонних фреймворков с моим собственным фреймворком, распространяемым с помощью Carthage - PullRequest
0 голосов
/ 12 июня 2019

У нас есть несколько различных проприетарных API, предоставленных нам как Frameworks, которые предлагают аналогичные функции. API, конечно, не идентичен, поэтому мы хотим построить вокруг него Framework-оболочку, чтобы нашим приложениям не нужно было заботиться о том, какой API они используют.

Для начала я создал инфраструктуру, которая использует один из этих API и имеет модульные тесты, которые подтверждают, что он работает должным образом. Мы добавили сторонний бинарный фреймворк как часть проекта, и путь поиска фреймворка выглядит так:

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

Все нерекурсивно. Путь Cartage здесь, потому что мы используем Quick and 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 голосов
/ 14 июня 2019

Проблема была решена при обновлении цели развертывания до 11.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...