Это моя спецификация SDK:
#
# Be sure to run `pod spec lint Core.podspec' to ensure this is a
# valid spec and to remove all comments including this before submitting the spec.
#
# To learn more about Podspec attributes see http://docs.cocoapods.org/specification.html
# To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/
#
Pod::Spec.new do |s|
s.name = "TiendeoCore"
s.version = "0.1.10"
s.summary = "Tiendeo Core"
s.homepage = "https://www.tiendeo.com"
s.license = 'Custom'
s.author = { "Tiendeo" => "[email protected]" }
s.platform = :ios, '10.0'
#REMOTE
s.source = { "http" => "https://tiendeo.jfrog.io/tiendeo/pods/TiendeoCore/TiendeoCore-0.1.10.zip" }
#LOCAL# s.source = { :git => "https://gitlab.tiendeo.com/ios/core-ios.git", :tag => s.version }
s.dependency "Governor", "~> 0.2.5"
s.dependency "AlamofireObjectMapper", "~> 5.2"
s.dependency "Alamofire", "~> 4.8"
s.dependency "RealmSwift", "~> 3.11.1"
s.dependency "RxSwift", "~> 4.2.0"
s.default_subspec = 'Lite'
s.subspec 'Lite' do |lite|
lite.name = "Lite"
#REMOTE
lite.framework = "TiendeoCore"
#REMOTE
lite.vendored_frameworks = 'TiendeoCore.framework'
#LOCAL# lite.source_files = ["Source/**/*.swift", "Source/Core.h"]
#LOCAL# lite.public_header_files = ["Source/Core.h"]
#LOCAL# lite.resource_bundles = {
#LOCAL# 'TiendeoCore' => ['Source/**/*.{xib,png,jpg,json,xcdatamodeld,xcdatamodel,xcassets,ttf,lproj}']
#LOCAL# }
end
s.subspec 'Full' do |full|
full.name = "Full"
#REMOTE
full.framework = "TiendeoCore"
#REMOTE
full.vendored_frameworks = 'TiendeoCore.framework'
#LOCAL# full.source_files = ["Source/**/*.swift", "Source/Core.h"]
#LOCAL# full.public_header_files = ["Source/Core.h"]
#LOCAL# full.resource_bundles = {
#LOCAL# 'TiendeoCore' => ['Source/**/*.{xib,png,jpg,json,xcdatamodeld,xcdatamodel,xcassets,ttf,lproj}']
#LOCAL# }
full.xcconfig = {
'OTHER_SWIFT_FLAGS' => '$(inherited) -DFULLTIENDEOCORE'
}
full.dependency "TiendeoAuth", "~> 0.0.6"
full.dependency "FacebookCore", '~> 0.4.0'
end
end
Я создаю TiendeoCore.framework для загрузки его в Cocoapods с помощью команды (у меня есть скрипт, который создает .framework и копирует архитектуру симулятора, я показываю основные команды скрипта):
xcodebuild -workspace "${WORKSPACE_PATH}" -scheme "${TARGET_NAME}" -configuration ${CONFIGURATION} -sdk iphoneos ONLY_ACTIVE_ARCH=NO ARCHS='arm64 armv7' BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" ENABLE_BITCODE=YES OTHER_CFLAGS="-fembed-bitcode" BITCODE_GENERATION_MODE=bitcode clean build
xcodebuild -workspace "${WORKSPACE_PATH}" -scheme "${TARGET_NAME}" -configuration ${CONFIGURATION} -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6' ONLY_ACTIVE_ARCH=NO ARCHS='i386 x86_64' BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" ENABLE_BITCODE=YES OTHER_CFLAGS="-fembed-bitcode" BITCODE_GENERATION_MODE=bitcode clean build
Загрузка фреймворка в CocoaPods завершается успешно, но когда я устанавливаю версию в свой проект (сборка и запуск в порядке), приложение выдает эту ошибку при запуске:
dyld: Library not loaded: @rpath/Bolts.framework/Bolts
Referenced from: /private/var/containers/Bundle/Application/43993CDF-61A7-405F-BA37-6FAD4B8B5FFF/ViewerPro-Demo.app/Frameworks/TiendeoCore.framework/TiendeoCore
Reason: image not found
В моей подспецификации есть две подспецификации (облегченная и полная), я устанавливаю облегченную версию по умолчанию, но во время выполнения TiendeoCore.framworks выдает, что требуется зависимость от полной подспецифики, в данном случае Facebook.
В моем коде есть флаг предварительной обработки под названием FULLTIENDEOCORE, чтобы заключить исходный код, использующий зависимости полной версии:
#if FULLTIENDEOCORE
import TiendeoAuth
#endif
Таким образом, если флаг объявлен в OTHER_SWIFT_FLAGS, код будет выполнен (этот флаг добавляется в подспецификацию в полной подспецифике).
Я не знаю, что мне не хватает.
Заранее спасибо.