gpt4 book ai didi

带 Objective-C Cocoapod 的 Swift 胖框架

转载 作者:IT王子 更新时间:2023-10-29 05:31:35 26 4
gpt4 key购买 nike

我用 Swift 构建了一个框架。该框架使用 Cocoapods,其中一个 pod 是用 Objective C 编写的。

我还使用自定义脚本使框架成为胖框架,因此它支持 32/64 位系统。 (这在项目的单独目标中运行,我想知道这是否与它有关?)

UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal

if [ "true" == ${ALREADYINVOKED:-false} ]
then
echo "RECURSION: Detected, stopping"
else
export ALREADYINVOKED="true"

// Step 1. Build Device and Simulator versions
xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
xcodebuild -target "${PROJECT_NAME}" -configuration ${CONFIGURATION} -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build

//Step 2. Copy the framework structure (from iphoneos build) to the universal folder
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework" "${UNIVERSAL_OUTPUTFOLDER}/"

// Step 3. Copy Swift modules (from iphonesimulator build) to the copied framework directory
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule/." "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule"

// Step 4. Create universal binary file using lipo and place the combined executable in the copied framework directory
lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}"

// Step 5. Convenience step to copy the framework to the project's directory
cp -R "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework" "${PROJECT_DIR}"

// Step 6. Convenience step to open the project's directory in Finder
open "${PROJECT_DIR}"

fi

当我创建这个胖框架并将其放入项目时,我想在编译器上使用它总是失败,因为项目看不到 objective-c cocoa pod 模块。

clang: error: linker command failed with exit code 1 (use -v to see invocation)
ld: framework not found Pusher for architecture x86_64

当我更改构建平台时,没有找到任何架构。

如果我可以生成可在单独的 Xcode 项目(适用于所有 iOS 或 OS X)中使用的框架,那么任何解决方案都很棒。

最佳答案

在使用 CocoaPods 时,您不能使用 -target 运行 xcodebuild。当您使用 -target 时,Xcode 将只考虑事件项目而不会引入 Pod 依赖项,类似于您刚刚在 Xcode 中打开项目文件并尝试构建。

您应该运行 xcodebuild -workspace "${PROJECT_NAME}.xcworkspace"-scheme "${PROJECT_NAME}"...,假设 CocoaPods 生成了工作区并且 Xcode 使用目标名称。如果在另一台设备上运行,您还需要确保您的方案被标记为共享。

构建框架后,您需要将其及其依赖的框架包含在将要使用它的应用中。对于您的框架,这意味着将其包含在常规 > 嵌入式二进制文件和常规 > 链接框架和库中。对于您依赖的框架(例如 AlamoFire),您可以指示用户将其包含在他们的 Podfile 中,您可以将其打包并与您的框架一起发布,或者您可以同时执行这两种操作,让用户做对他们有用的事情。

关于带 Objective-C Cocoapod 的 Swift 胖框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34882837/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com