标签: ios-universal-framework

如何导出"胖"Cocoa Touch Framework(用于模拟器和设备)?

使用Xcode 6,我们可以创建自己的Dynamic Cocoa Frameworks.

在此输入图像描述

因为:

  • 模拟器仍然使用32-bit

  • 从2015年6月1日开始,提交到App Store的应用更新必须包含64位支持,并使用iOS 8 SDK(developer.apple.com)构建

我们必须使胖库在设备和模拟器上运行项目.即支持Frameworks中的32位和64位.

但我没有找到任何手册,如何导出通用胖框架以便将来与其他项目集成(并与某人共享此库).

以下是我重现的步骤:

  1. 设置ONLY_ACTIVE_ARCH=NOBuild Settings

    在此输入图像描述

  2. 支持添加armv7 armv7s arm64 i386 x86_64Architectures(肯定)

在此输入图像描述

  1. 构建框架并在Finder中打开它:

在此输入图像描述 在此输入图像描述

  1. 将此框架添加到另一个项目中

实际结果:

但最终我仍然遇到在设备和模拟器上同时使用此框架运行项目的问题.

  • 如果我从Debug-iphoneos文件夹中获取框架- 它适用于设备并在模拟器上获取错误:ld: symbol(s) not found for architecture i386

    xcrun lipo -info CoreActionSheetPicker
    
    Run Code Online (Sandbox Code Playgroud)

    胖文件中的体系结构:CoreActionSheetPicker是:armv7 armv7s arm64

  • 如果我从Debug-iphonesimulator文件夹中获取框架- 它适用于模拟器.我在设备上有错误:ld: symbol(s) not found for architecture arm64

    xcrun lipo -info CoreActionSheetPicker
    
    Run Code Online (Sandbox Code Playgroud)

    胖文件中的体系结构:CoreActionSheetPicker是:i386 x86_64

那么,如何创建一个适用于设备和模拟器的动态框架?

这个答案与Xcode 6 iOS …

xcode cocoa-touch frameworks ios ios-universal-framework

107
推荐指数
3
解决办法
3万
查看次数

Xcode 6 iOS创建Cocoa Touch框架 - 架构问题

我正在尝试为iOS应用程序制作动态框架.感谢新版本的Xcode(6),我们可以在创建新项目时选择Cocoa Touch Framework,不再需要添加聚合目标,运行脚本等等.构建框架时我没有问题.但是当我尝试在iOS应用程序中使用它时,我遇到了一些架构问题.

ld: warning: ignoring file /Library/Frameworks/MyFramework.framework/MyFramework, file was built for x86_64 which is not the architecture being linked (arm64): /Library/Frameworks/MyFramework.framework/MyFramework
Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_MyFrameworkWebService", referenced from:
      objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

ld: warning: ignoring file /Library/Frameworks/MyFramework.framework/MyFramework, file was built for x86_64 which is not the architecture being linked (armv7): /Library/Frameworks/MyFramework.framework/MyFramework
Undefined symbols for architecture armv7:
  "_OBJC_CLASS_$_MyFrameworkWebService", referenced …
Run Code Online (Sandbox Code Playgroud)

cocoa dynamic-library ios-universal-framework xcode6 ios8

49
推荐指数
6
解决办法
5万
查看次数

获取客户端中iOS Universal Framework的版本号

这可能不仅限于iOS Universal Frameworks,而是所有xxx.framework文件.但是,我似乎无法找到有关如何在客户端应用程序中获取当前版本和构建框架的文档.在应用程序中,您可以使用以下内容:

    NSString *name = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"];
    NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
Run Code Online (Sandbox Code Playgroud)

这将为您提供存储在应用程序的Info.plist中的当前信息.但是我们如何找到框架的信息.就我而言,特别是嵌入式框架.

cocoa-touch frameworks ios ios-universal-framework

16
推荐指数
3
解决办法
9309
查看次数

创建通用Objective-C框架,LIPO无法映射输入文件

过去一天一直在研究这个没有成功,希望有人可以提供一些关于这个的指针。

我继承了一个旧的 objC 静态库项目,我正在尝试将其转换为动态的通用框架。

为框架创建了一个新目标,编译无问题(经过一些构建设置调整后)创建一个新聚合,添加一个运行脚本阶段:

    ######################
    # Options
    ######################

    REVEAL_ARCHIVE_IN_FINDER=true

    FRAMEWORK_NAME="MyUniversalFramework"

    SIMULATOR_LIBRARY_PATH="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${FRAMEWORK_NAME}.framework"

    DEVICE_LIBRARY_PATH="${BUILD_DIR}/${CONFIGURATION}-iphoneos/${FRAMEWORK_NAME}.framework"

    UNIVERSAL_LIBRARY_DIR="${BUILD_DIR}/${CONFIGURATION}-iphoneuniversal"

    FRAMEWORK="${UNIVERSAL_LIBRARY_DIR}/${FRAMEWORK_NAME}.framework"


    ######################
    # Build Frameworks
    ######################

    xcodebuild -project ${FRAMEWORK_NAME}.xcodeproj -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos  BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build

    xcodebuild -project ${FRAMEWORK_NAME}.xcodeproj -target "${PROJECT_NAME}" -configuration ${CONFIGURATION} -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build

    ######################
    # Create directory for universal
    ######################

    rm -rf "${UNIVERSAL_LIBRARY_DIR}"

    mkdir "${UNIVERSAL_LIBRARY_DIR}"

    mkdir "${FRAMEWORK}"


    ######################
    # Copy files Framework
    ######################
    cp -R "${SIMULATOR_LIBRARY_PATH}" "${FRAMEWORK}"

    cp -R "${DEVICE_LIBRARY_PATH}" "${FRAMEWORK}"


    ######################
    # Make an …
Run Code Online (Sandbox Code Playgroud)

frameworks objective-c ios lipo ios-universal-framework

8
推荐指数
1
解决办法
1662
查看次数

如何在xcode6中创建通用框架

我知道如何在Xcode 5中创建一个框架.但是在Xcode 6中如何结合模拟器框架和设备框架?当我尝试组合时,我得到代码签名错误.当我lipo用来组合两个框架时,我也会收到错误.

错误: Command /bin/sh failed with exit code 65

ios ios-universal-framework

5
推荐指数
1
解决办法
2998
查看次数

依赖 pod 的 Swift 通用框架

我正在开发一个依赖 Alamofire 的小型 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
Run Code Online (Sandbox Code Playgroud)

这是生成框架的脚本。它适用于没有 Pods 依赖项的其他框架,所以我认为没问题:

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 …
Run Code Online (Sandbox Code Playgroud)

ios cocoapods ios-universal-framework swift

3
推荐指数
1
解决办法
1613
查看次数

在Xcode 10上为通用框架运行脚本

我的Xcode 9.x,我正在使用下面的脚本,效果很好:

######################
# Options
######################

REVEAL_ARCHIVE_IN_FINDER=false

FRAMEWORK_NAME="${PROJECT_NAME}"

SIMULATOR_LIBRARY_PATH="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${FRAMEWORK_NAME}.framework"

DEVICE_LIBRARY_PATH="${BUILD_DIR}/${CONFIGURATION}-iphoneos/${FRAMEWORK_NAME}.framework"

UNIVERSAL_LIBRARY_DIR="${BUILD_DIR}/${CONFIGURATION}-iphoneuniversal"

FRAMEWORK="${UNIVERSAL_LIBRARY_DIR}/${FRAMEWORK_NAME}.framework"


######################
# Build Frameworks
######################

xcodebuild -project "${PROJECT_FILE_PATH}" -target "${TARGET_NAME}"
ONLY_ACTIVE_ARCH=NO -configuration "${CONFIGURATION}" -sdk iphonesimulator
BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}"
CONFIGURATION_BUILD_DIR="${IPHONE_SIMULATOR_BUILD_DIR}" SYMROOT="${SYMROOT}"
ARCHS="i386 x86_64" ENABLE_BITCODE=YES OTHER_CFLAGS="-fembed-bitcode" $ACTION 2>&1

xcodebuild -project "${PROJECT_FILE_PATH}" -target "${TARGET_NAME}"
ONLY_ACTIVE_ARCH=NO -configuration "${CONFIGURATION}" -sdk iphoneos
BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}"
CONFIGURATION_BUILD_DIR="${IPHONE_DEVICE_BUILD_DIR}" SYMROOT="${SYMROOT}"
ARCHS="armv7 armv7s arm64" ENABLE_BITCODE=YES OTHER_CFLAGS="-fembed-bitcode" $ACTION 2>&1

######################
# Create directory for universal
######################

rm -rf "${UNIVERSAL_LIBRARY_DIR}"

mkdir "${UNIVERSAL_LIBRARY_DIR}"

mkdir "${FRAMEWORK}"


######################
# Copy files Framework
###################### …
Run Code Online (Sandbox Code Playgroud)

xcode ios ios-frameworks ios-universal-framework xcode10

3
推荐指数
1
解决办法
2287
查看次数