当前位置: 首页 > news >正文

Xcode 7 制作 framework

创建工程

创建工程

添加源代码

  1. 添加OC源文件 在 swift 制作 framework 添加 OC文件时,不能设置桥接文件,而是将 OC头文件放到框架的头文件中,如下图:

    同时将该OC头文件设置为 public(默认添加到Private,可拖动到Public):

  2. 添加框架源代码

添加脚本

添加生成模拟器与真机都可使用的 framework 的运行脚本。

  1. 给框架工程添加Target:File/New/Target
    脚本内容
    脚本内容如下(脚本内容是从网上搜索到的,但在工程中一直出现问题,无法用于模拟器,后来发现是缺少了cp -R "${SIMULATOR_DIR}/" "${INSTALL_DIR}/"):
# Sets the target folders and the final framework product.
# 如果工程名称和Framework的Target名称不一样的话,要自定义FMKNAME
# 例如: FMK_NAME = "MyFramework"
FMK_NAME=${PROJECT_NAME}
# Install dir will be the final output to the framework.
# The following line create it in the root folder of the current project.
INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework
# Working dir will be deleted after the framework creation.
WRK_DIR=build
DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework
SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework
# -configuration ${CONFIGURATION}
# Clean and Building both architectures.
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos clean build
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator clean build
# Cleaning the oldest.
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
cp -R "${SIMULATOR_DIR}/" "${INSTALL_DIR}/"
# Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.
lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"
rm -r "${WRK_DIR}"
open "${INSTALL_DIR}"
复制代码
  1. 编译脚本:Product/Build For/Profiling
    编译完脚本会自动弹出生成的framework的文件夹。

添加framework到工程

  1. 将目标 framework 和其所用到的资源文件拖到目标工程中

  2. 添加目标框架到复制文件中去

打包提交到 App Store

在使用自制的 Framework 的应用程序打包提交到 App Store 的时候,可能会遇到以下问题“Unsupported architectures. Your executable contains unsupported architectures '[x86_64, i386]'”,此时在你要打包提交的目标程序Build Phases下添加Run Script,并将以下内容复制进去:

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
EXTRACTED_ARCHS=()
for ARCH in $ARCHS
do
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done
echo "Merging extracted architectures: ${ARCHS}"
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"
echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
done
复制代码

到此就结束了

参考

  1. Creating your first iOS Framework

转载于:https://juejin.im/post/5a30e6fb6fb9a045076fa98f

相关文章:

  • WARNING Uninstalling will remove the application data!
  • 新手 php连接数据库大概。简单过程浅析以及遇到的问题分析
  • Django 配置文件 settings.py
  • CORS FOR AspNetCore
  • spark shell的学习
  • 安卓模拟器BlueStacks+TCPdump对APP抓包分析
  • maven scope含义的说明
  • Javac编译器源代码分析
  • 物极必反,滥用闭包的结果就是回归结构化编程
  • 2017 年终总结 —— 在路上
  • 加密算法(对称加密)AES、DES (非对称加密)RSA、DSA
  • Hadoop集群(第10期)_MySQL关系数据库
  • python学习笔记(四)字符串及字符串操作
  • 【Dalston】【第六章】API服务网关(Zuul) 下
  • 解决 Nginx + PHP-FPM (Permission denied)报错的办法
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • Android Volley源码解析
  • canvas绘制圆角头像
  • JavaScript 一些 DOM 的知识点
  • js如何打印object对象
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Mysql数据库的条件查询语句
  • Python学习笔记 字符串拼接
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 后端_MYSQL
  • 基于 Babel 的 npm 包最小化设置
  • 以太坊客户端Geth命令参数详解
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • ​低代码平台的核心价值与优势
  • ​第20课 在Android Native开发中加入新的C++类
  • #每日一题合集#牛客JZ23-JZ33
  • (03)光刻——半导体电路的绘制
  • (2)MFC+openGL单文档框架glFrame
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (安卓)跳转应用市场APP详情页的方式
  • (多级缓存)多级缓存
  • (分布式缓存)Redis持久化
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (四)鸿鹄云架构一服务注册中心
  • (学习日记)2024.01.19
  • (转)IOS中获取各种文件的目录路径的方法
  • *** 2003
  • *2 echo、printf、mkdir命令的应用
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET中GET与SET的用法
  • [ C++ ] STL---stack与queue
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [ SNOI 2013 ] Quare
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [1159]adb判断手机屏幕状态并点亮屏幕