swift - 有没有办法根据静态或动态使用情况有条件地定义 Podspec 属性?

标签 swift cocoapods

我第一次在我的 CocoaPods 库中包含 Swift 源代码。为了让项目进行编译,我需要将生成的 Swift header 导入到我的 Objective-C 源代码中。这有两种不同的形式,具体取决于项目是构建为静态库还是动态框架:

#ifdef BUILT_AS_FRAMEWORK
    #import <UnzipKit/UnzipKit-Swift.h>
#else
    // Used when built as a static library
    #import "UnzipKit-Swift.h"
#endif

我在 Xcode 项目中定义了 BUILT_AS_FRAMEWORK 以供开发时间,但是当我将库作为动态框架进行 lint 时,并且因为我没有在 Podspec 中定义该标志,所以它会尝试解决第二次导入,找不到。

有没有办法可以定义 BUILT_AS_FRAMEWORK 预处理器宏,但前提是使用的 Podfile 不将其构建为静态库?

我创建了issue #9101 in the CocoaPods project对于这个问题。

最佳答案

我能够将 Xcode 环境变量 (PACKAGE_TYPE) 与预编译运行脚本构建阶段结合使用,动态生成要导入的 header ,从而生成正确的 Swift header 导入。

生成-swift-import-header.sh

#!/bin/sh

[[ "${PACKAGE_TYPE}" = "com.apple.package-type.wrapper.framework" ]] \
    && SWIFTIMPORT="<${PRODUCT_MODULE_NAME}/${PRODUCT_MODULE_NAME}-Swift.h>" \
    || SWIFTIMPORT="\"${PRODUCT_MODULE_NAME}-Swift.h\""

if [ -z "$PODS_TARGET_SRCROOT" ]; then
    PODS_TARGET_SRCROOT=${SOURCE_ROOT}
    echo "Building in Xcode instead of CocoaPods. Overriding PODS_TARGET_SRCROOT with SOURCE_ROOT"
fi

_Import_text="
#ifndef GeneratedSwiftImport_h
#define GeneratedSwiftImport_h

#import ${SWIFTIMPORT}

#endif /* GeneratedSwiftImport_h */
"
echo "$_Import_text" > ${PODS_TARGET_SRCROOT}/Source/GeneratedSwiftImport.h

Podspec 更新

s.script_phases = { :name => "Generate UnzipKit Swift Header",
                    :script => "\"${PODS_TARGET_SRCROOT}\"/Scripts/generate-swift-import-header.sh",
                    :execution_position => :before_compile }

库来源

我用以下内容替换了条件导入:

#import "GeneratedSwiftImport.h"

我还忽略了 Git 中的 GenelatedSwiftImport.h 文件。

关于swift - 有没有办法根据静态或动态使用情况有条件地定义 Podspec 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57461108/

相关文章:

Swift日期(通过添加:to:) returns nil for trivial calculation in REPL

ios - Xcode 12 : Compiling for iOS 10. 0,但模块 'RxSwift' 的最低部署目标为 iOS 12.0

Objective-C 无法识别的选择器 + 使用 MagicalRecord CocoaPod 初始化

ios - 通过 Xcode 8 中的按钮移动图像

ios - FBSDKCoreKit 项目错误

ios - 具有多个 .xcconfig 文件和 cocoapods 的复杂 Xcode 项目

cordova - ionic - 添加/删除 phonegap-push-plugin - CocoaPods 未找到

ios - scrollViewDidScroll 没有被调用(我设置了委托(delegate)!)

ios - Swift 照片库访问

ios - swift 中 bounds.size.width 和 bounds.width 之间的区别?