2017-07-19 73 views
1

我正在开发一个依赖于Alamofire的小型Swift框架。我使用它作为属于同一工作区的应用程序的嵌入式框架,并且完美地工作。取决于pod的Swift通用框架

问题出现在我想要构建一个具有聚合目标的通用框架时。然后,当执行脚本生成框架时,它会失败,并显示消息No such module 'Alamofire',在我的一个源文件中提及import Alamofire

这是我Podfile:

platform :ios, '9.0' 
use_frameworks! 
inhibit_all_warnings! 

target 'FSIBackend' do 
    pod 'SwiftLint' 
    pod 'Alamofire' 
    pod 'SwiftyJSON' 
end 

这是生成框架脚本。它与不依赖豆荚其他框架,所以我认为这是确定:

set -e 

# Setup 
FRAMEWORK_NAME="${1}" 
BUILD_DIR="${SRCROOT}/build" 
OUTPUT_DIR="${HOME}/Desktop/" 
OUTPUT="${OUTPUT_DIR}/${FRAMEWORK_NAME}.framework" 

rm -rf "${BUILD_DIR}" 
rm -rf "${OUTPUT}" 
mkdir -p "${OUTPUT_DIR}" 

# Build 
xcodebuild -target "${FRAMEWORK_NAME}" -configuration Release -arch arm64 -arch armv7 -arch armv7s only_active_arch=no defines_module=yes -sdk "iphoneos" 
xcodebuild -target "${FRAMEWORK_NAME}" -configuration Release -arch x86_64 -arch i386 only_active_arch=no defines_module=yes -sdk "iphonesimulator" 

# Copy the device version of framework to output. 
cp -r "${BUILD_DIR}/Release-iphoneos/${FRAMEWORK_NAME}.framework" "${OUTPUT}" 

# Replace the framework executable within the framework with a new version created by merging the device and simulator frameworks' executables with lipo. 
lipo -create -output "${OUTPUT}/${FRAMEWORK_NAME}" "${BUILD_DIR}/Release-iphoneos/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}" "${BUILD_DIR}/Release-iphonesimulator/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}" 

# Copy the Swift module mappings for the simulator into the framework. The device mappings already exist from step 6. 
cp -r "${BUILD_DIR}/Release-iphonesimulator/${FRAMEWORK_NAME}.framework/Modules/${FRAMEWORK_NAME}.swiftmodule/" "${OUTPUT}/Modules/${FRAMEWORK_NAME}.swiftmodule" 

# Delete build. 
rm -rf "${BUILD_DIR}" 

的问题是,我不知道如何建立我的框架取决于Alamofire。我必须为我的框架创建一个podspec并通过CocoaPods使用它吗?这是我第一次根据吊舱创建一个通用框架,所以我不知道我是否做了不可能的事情。

非常感谢。

+0

你可以发布你在Aggregate target中运行的脚本吗? –

+0

@mag_zbc完成:) – emenegro

+1

最近我也遇到了使用豆荚构建工作空间的问题。您可以尝试将'xcodebuild -target“$ {FRAMEWORK_NAME}''更改为'xcodebuild -workspace”YourWorkspace.xcworkspace“-scheme YourScheme' –

回答

1

最后,我可以完成它考虑@mag_zbc提供的建议,谢谢。

我不得不修改框架一代是这样的:

set -e 

# Setup 
WORKSPACE="${1}" 
FRAMEWORK_NAME="${2}" 
BUILD_DIR="${SRCROOT}/build" 
OUTPUT_DIR="${HOME}/Desktop/" 
OUTPUT="${OUTPUT_DIR}/${FRAMEWORK_NAME}.framework" 
CONFIGURATION="${CONFIGURATION}" 

rm -rf "${BUILD_DIR}" 
rm -rf "${OUTPUT}" 
mkdir -p "${OUTPUT_DIR}" 

# Build the framework for device and for simulator (using all needed architectures). 
xcodebuild -workspace "${WORKSPACE}" -scheme "${FRAMEWORK_NAME}" -configuration ${CONFIGURATION} -arch x86_64 -arch i386 only_active_arch=no defines_module=yes -sdk "iphonesimulator" clean build CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphonesimulator 
xcodebuild -workspace "${WORKSPACE}" -scheme "${FRAMEWORK_NAME}" -configuration ${CONFIGURATION} -arch arm64 -arch armv7 -arch armv7s only_active_arch=no defines_module=yes -sdk "iphoneos" clean build CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphoneos 

# Copy the device version of framework to output. 
cp -r "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${FRAMEWORK_NAME}.framework" "${OUTPUT}" 

# Replace the framework executable within the framework with a new version created by merging the device and simulator frameworks' executables with lipo. 
lipo -create -output "${OUTPUT}/${FRAMEWORK_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}" 

# Copy the Swift module mappings for the simulator into the framework. The device mappings already exist from step 6. 
cp -r "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${FRAMEWORK_NAME}.framework/Modules/${FRAMEWORK_NAME}.swiftmodule/" "${OUTPUT}/Modules/${FRAMEWORK_NAME}.swiftmodule" 

# Delete build. 
rm -rf "${BUILD_DIR}" 

生成后,并添加到消费者应用程序,唯一剩下要做的就是使用的CocoaPods在消费应用获取Alamofire和SwiftyJSON 。