Framework制作教程
- 詳細(xì)步驟圖
- 創(chuàng)建源碼項(xiàng)目
- 創(chuàng)建對外發(fā)布的Framework項(xiàng)目
一狈蚤、詳細(xì)步驟圖
二扭粱、創(chuàng)建源碼項(xiàng)目
以MAWebKit為例悟狱, 源碼項(xiàng)目統(tǒng)一都是放到GitLab源碼Group下滔蝉。
1. 創(chuàng)建Framework項(xiàng)目
Xcode -> File -> New -> Project 選擇Cocoa Touch Framework模板巴比,新建項(xiàng)目MAWebKit,勾選Include Unit Tests 為寫單元測試和Sonar掃描做準(zhǔn)備站楚。
點(diǎn)擊下一步選擇合適的目錄保存脱惰。
2. 新生成的項(xiàng)目結(jié)構(gòu)如圖
3. 多個組件配置
如果一個組件庫包含多個組件,類似Cocoapods的subspec窿春。那需要新建其他組件的Framework拉一。 例如:MAWebKitCore、MAWebKitNFC旧乞、MAWebKitGPS舅踪、MAWebKitFace
-
Project中選中項(xiàng)目文件,展示出Target列表良蛮,最下方選擇 + 新建Target抽碌。
image.png -
選擇Cocoa Touch Framework,填寫必要項(xiàng)决瞳,該處可以不勾選UnitTests货徙,點(diǎn)擊完成創(chuàng)建。
image.png -
按照上述兩步驟依次創(chuàng)建MAWebKitNFC皮胡、MAWebKitGPS痴颊、MAWebKitFace。創(chuàng)建完成后整體項(xiàng) 目結(jié)構(gòu)如圖屡贺。
image.png
4. 配置項(xiàng)目
- 配置所有Target的Deployment Target 為9.0
- 配置所有Target的版本號Version和Build
- 反選所有Target的Automatically Manage Signing(自動管理簽名)
- 配置所有Target的Build Settings蠢棱,Defines Module 改為 No (不生成module文件)
按照目前這種結(jié)構(gòu)產(chǎn)生的文件目錄,在項(xiàng)目目錄下比較亂甩栈,可以把所有info.plist文件所在文件夾整 理到同一個文件夾Supports下泻仙,步驟如下:
- 項(xiàng)目中新建Group,命名為Supports
- 將所有info.plist所在文件夾的Group直接在Xcode中拖到Supports的Group下量没。
-
配置Build Settings中的info.plist File的值為: Supports/MAWebKit/info.plist (MAWebKit是 Target名字)玉转,由于info.plist文件的物理位置發(fā)生改變,原來的配置無法找到殴蹄,所以需要重新進(jìn)行配置
image.png
image.png
image.png
image.png
5. 配置Framework之間的依賴關(guān)系
Framework之間的依賴關(guān)系分為兩種:
項(xiàng)目內(nèi)的Framework依賴 和 跨項(xiàng)目的Framework依賴 究抓。
(1) 項(xiàng)目內(nèi)的Framework依賴: 直接配置
例如:MAWebKitNFC依賴于MAWebKitCore猾担、 MAWebKitGPS依賴于MAWebKitCore
- 選中MAWebKitNFC的Target,點(diǎn)擊General標(biāo)簽刺下,
- Frameworks and Libraries 中選擇加號绑嘹,選擇 MAWebKitCore ,同時選
擇 Do Not Embed 橘茉。 - 注意點(diǎn):如果MAWebKitCore中有Category工腋,則需要在MAWebKitNFC的Build Settings中配置 other linker flag 增加 -ObjC 選項(xiàng)。
(2) 跨項(xiàng)目的Framework依賴:cocoapods管理
例如:MAWebKitGPS依賴?芽的 MAGPSKit 捺癞,MAWebKitPhoto依賴第三方
庫 TZImagePickerController 夷蚊,這樣我們就通過cocoapods來進(jìn)行管理
- 打開終端Terminal构挤,cd到項(xiàng)目所在目錄
- 運(yùn)行命令: pod init 髓介, 這樣會針對所有的Target生成一個Pofile文件
- 修改平臺的版本號。
- 給target添加私有庫或第三方庫依賴的配置筋现。
- 刪除不需要配置依賴的target項(xiàng)唐础。
- 開啟 use_frameworks! 配置,為了打包的時候不將依賴的第三方庫打到Framework中矾飞。
- 在終端中運(yùn)行命令: pod install 一膨,生成workspace文件、導(dǎo)入依賴的第三方庫洒沦。
6. 源碼目錄結(jié)構(gòu)規(guī)劃
為了方便統(tǒng)一管理主framework和各個subspec的framework源碼豹绪,將所有源碼按照以下步驟,進(jìn)行集中 管理申眼。
創(chuàng)建源碼總目錄文件夾 MAWebKit 瞒津,用于存儲資源文件和源碼文件 為了方便源碼調(diào)試,才設(shè)計這樣的目錄結(jié)構(gòu)(參考了源碼cocoapods私有庫目錄結(jié)構(gòu))
-
創(chuàng)建資源文件存儲文件夾( Assets )括尸,并創(chuàng)建bundle資源文件( MAWebKit.bundle )巷蚪,如:MAWebKit/Assets/MAWebKit.bundle
image.png 創(chuàng)建源碼存儲文件夾( Classes ),并在其下依次創(chuàng)建各個target的源碼文件夾濒翻,如:
MAWebKit/Classes/MAWebKit , MAWebKit/Classes/MAWebKitCore , MAWebKit/Classes/MAWebKitGPS-
在各個target文件夾下依次創(chuàng)建公有文件夾( Public )和私有文件夾( Private ),如:MAWebKit/Classes/MAWebKit/Public , MAWebKit/Classes/MAWebKit/Private
image.png 將Supports下的各個target的頭文件屁柏,依次移動到各自的Public目錄下
打開framework工程,依次刪除Supports目錄下相關(guān)頭文件的引用
右鍵點(diǎn)擊 Add Files To ”MAWebKit“ 有送,添加Assets到工程中
右鍵點(diǎn)擊 Add Files To ”MAWebKit“ 淌喻,添加Classes到工程中
依次編輯各個target的Public中的頭文件為對應(yīng)的framework,且選擇可?范圍為public
-
依次編輯各個target的Public中的總頭文件(如 MAWebKitCore.h ), 添加版本號備注信息雀摘, 方便集成方快速知道當(dāng)前所用組件的版本號
image.png
image.png
image.png
image.png
7. 編寫Framework源碼
選中Public或者Private目錄似嗤,右鍵,新建類文件届宠,例如UIView+MAPrivate.h烁落、 UIView+MAPrivate.m乘粒。選擇對應(yīng)的Framework(MAWebKitCore)的target。
- 配置對外暴露的.h文件
選中.h文件伤塌,直接在最右側(cè)的屬性欄中選擇可?范圍(Private/Project/Public)灯萍。
在Build Phases的Headers中直接拖拽進(jìn)行配置。
將所有設(shè)置為Public可?范圍的.h文件引入到和Framework同名的.h文件中每聪,統(tǒng)一使用尖括號 <>的方式引入旦棉。
以MAWebKitCore的Framework為例:
#import <MAWebKitCore/MAWebViewController.h>
// ... ...
- 源碼編寫規(guī)則
源碼中引入其他類的規(guī)范
引入統(tǒng)一target內(nèi)的類文件直接 #import "類名.h" 即可。
引入依賴的target或者第三方庫的药薯,使用 #import <第三方庫(Framework)名/全量的頭文件名.h>
源碼的編寫要符合sonar掃描的標(biāo)準(zhǔn)規(guī)則
所有能處理的警告信息都要處理掉
對外暴露的使用方法盡可能的簡單
盡量沒有初始化操作
8. 打包Framework操作
編寫打包Framework腳本(最后有參考)绑洛,命名為make-framework(可以其他名稱),可以直接將 make-framework下載下來打包使用童本。
為了方便以后的打包真屯,建議將 make-framework配置到系統(tǒng)的環(huán)境變量PATH中去,這樣可以直接執(zhí)行 make-framework xxxx 命令來進(jìn)行打包操作。
-
make-framework腳本使用方法
image.png 由于打包腳本要求必須有workspace文件,所以如果項(xiàng)目中沒有workspace文件需要創(chuàng)建一個嚎于。
Xcode -> File -> New -> Workspace 新建workspace,保存目錄xcodeproj放在同一目錄下 即可配深。
打開新建的workspace,右鍵添加文件到workspace嫁盲,選擇對應(yīng)的xcodeproj即可篓叶。如果一個項(xiàng)目中有很多個Framework(類似我們舉例的MAWebKit),如果每個Framework都手動 打包羞秤,這樣會很麻煩缸托,也很容易出錯,這樣我們可以寫一個批量打包腳本锥腻。
# 批量打包腳本示例
maia-framework -w MAWebKit -s MAWebKit -p
maia-framework -w MAWebKit -s MAWebKitCore -p
maia-framework -w MAWebKit -s MAWebKitPhoto -p
maia-framework -w MAWebKit -s MAWebKitAudio -p
maia-framework -w MAWebKit -s MAWebKitNFC -p
maia-framework -w MAWebKit -s MAWebKitCodeScan -p
maia-framework -w MAWebKit -s MAWebKitGPS -p
maia-framework -w MAWebKit -s MAWebKitFace -o
9. 創(chuàng)建podspec文件
有時候?yàn)榱朔奖愣ㄎ粏栴}嗦董,需要通過源碼的方式進(jìn)行調(diào)試,這就需要創(chuàng)建源碼podspec瘦黑。 我們可以通過命令行來創(chuàng)建cocoapods的配置podspec文件京革。
- 打開終端Terminal,進(jìn)入項(xiàng)目目錄
- 運(yùn)行命令: pod spec create 庫名(MAWebKit) 幸斥,這樣會生成一個MAWebKit.podspec文件匹摇。
- 配置源碼podspec文件,根據(jù)自己組件的具體情況甲葬,指定默認(rèn)subspec廊勃,比如:組件MAWebKit,默認(rèn)依賴核心組件MAWebKitCore,那么就指定默認(rèn)subspec為Core 條碼掃描MACodeScan坡垫,默認(rèn)不依賴任何subspec梭灿,因?yàn)樗膬蓚€subspec是互斥的
三、創(chuàng)建對外發(fā)布的Framework項(xiàng)目
- 創(chuàng)建腳本maia-project(最后有參考)冰悠,只要運(yùn)行命令堡妒,按 照步驟一步一步的操作下去,會自動創(chuàng)建Assets溉卓、Frameworks皮迟、庫名.podspec文件,同時會進(jìn)行g(shù)it的 關(guān)聯(lián)操作桑寨。
- Assets:放置資源文件的位置
- Frameworks:放置所有framework的位置
- 庫名.podspec:cocoapods的配置文件
腳本參考
mark-framework
#!/bin/sh
function usage() {
echo "************************************************"
echo "-s scheme的名稱伏尼,必填"
echo "-w workspace名稱,可選項(xiàng)尉尾,默認(rèn)從項(xiàng)目中檢測xcworkspace文件"
echo "-f 打包最終生成的framework的名字爆阶,可選參數(shù),如果沒有默認(rèn)使用scheme的內(nèi)容"
echo "-o 打包成功后是否自動打開framework所在的文件夾代赁,默認(rèn)不打開"
echo "-p 是否需要運(yùn)行pod install扰她,默認(rèn)否"
echo "-d 是否以Debug的配置進(jìn)行打包兽掰,默認(rèn)使用Release"
echo "例: maia-framework -w MAWebKit -s MAWebKit -f MAWebKit -o -p -d"
echo "************************************************"
exit 1;
}
######################
# Options
######################
CONFIGURATION=Release
WORKSPACE_NAME=
SCHEME_NAME=
FRAMEWORK_NAME=
REVEAL_ARCHIVE_IN_FINDER=false
POD_INSTALL=false
######################
# Read Params
######################
while getopts "w:s:f:opd" arg
do
case $arg in
w )
WORKSPACE_NAME=$OPTARG
;;
s )
SCHEME_NAME=$OPTARG
;;
f )
FRAMEWORK_NAME=$OPTARG
;;
o )
REVEAL_ARCHIVE_IN_FINDER=true
;;
p )
POD_INSTALL=true
;;
d )
CONFIGURATION=Debug
;;
? )
usage
;;
esac
done
if [[ ${SCHEME_NAME} == "" ]]; then
echo "scheme必填, 使用-s來指定scheme芭碍。"
usage
fi
if [[ ${FRAMEWORK_NAME} == "" ]]; then
FRAMEWORK_NAME=${SCHEME_NAME}
fi
function printParams() {
echo "****************************"
echo "workspace: ${WORKSPACE_NAME}"
echo "scheme: ${SCHEME_NAME}"
echo "FRAMEWORK: ${FRAMEWORK_NAME}"
echo "Pod install: ${POD_INSTALL}"
echo "Reveal In Finder: ${REVEAL_ARCHIVE_IN_FINDER}"
echo "****************************"
}
printParams
ma_default_workspace=""
function check_default_workspace() {
echo "\n------ xcode workspace checking ..."
workspace_files=$(ls | grep .xcworkspace$ | wc -l)
if [ ${workspace_files} == 1 ] ; then
ma_default_workspace="`ls | grep .xcworkspace$ | sed -e 's/.xcworkspace//g'`"
echo "檢測到workspace【 ${ma_default_workspace} 】"
else
echo "沒有找到xcode的workspace或者項(xiàng)目下有多個workspace文件,請自行檢查孽尽。"
exit 1
fi
}
check_default_workspace
if [[ ${WORKSPACE_NAME} == "" ]]; then
WORKSPACE_NAME="${ma_default_workspace}"
fi
if [[ ${POD_INSTALL} = true ]]; then
if [[ -f "Podfile" ]]; then
echo "--- Removing Pods cache"
rm -rf Podfile.lock
rm -rf Pods
pod install
else
echo "沒有找到Podfile文件"
exit 1
fi
fi
######################
# Directories
######################
FRAMEWORK_TARGET_PATH="${HOME}/Documents/MaiaFrameworks/${FRAMEWORK_NAME}"
SIMULATOR_BUILD_DIR="${FRAMEWORK_TARGET_PATH}/${CONFIGURATION}-iphonesimulator"
DEVICE_BUILD_DIR="${FRAMEWORK_TARGET_PATH}/${CONFIGURATION}-iphoneos"
SIMULATOR_LIBRARY_PATH="${SIMULATOR_BUILD_DIR}/${FRAMEWORK_NAME}.framework"
DEVICE_LIBRARY_PATH="${DEVICE_BUILD_DIR}/${FRAMEWORK_NAME}.framework"
UNIVERSAL_LIBRARY_DIR="${FRAMEWORK_TARGET_PATH}/${CONFIGURATION}-iphoneuniversal"
UNIVERSAL_LIBRARY_PATH="${UNIVERSAL_LIBRARY_DIR}/${FRAMEWORK_NAME}.framework"
function printDirs() {
echo "----------------------------"
echo "BUILD_DIR : ${FRAMEWORK_TARGET_PATH}"
echo "SIMULATOR_LIBRARY_PATH : ${SIMULATOR_LIBRARY_PATH}"
echo "DEVICE_LIBRARY_PATH : ${DEVICE_LIBRARY_PATH}"
echo "UNIVERSAL_LIBRARY_DIR : ${UNIVERSAL_LIBRARY_DIR}"
echo "FRAMEWORK : ${UNIVERSAL_LIBRARY_PATH}"
echo "----------------------------"
}
printDirs
######################
# Create directory for universal
######################
rm -rf "${FRAMEWORK_TARGET_PATH}"
mkdir -p "${SIMULATOR_BUILD_DIR}"
mkdir -p "${DEVICE_BUILD_DIR}"
mkdir -p "${UNIVERSAL_LIBRARY_DIR}"
mkdir "${UNIVERSAL_LIBRARY_PATH}"
######################
# Build Frameworks
######################
BUILD_SETTINGS="ONLY_ACTIVE_ARCH=NO CLANG_ENABLE_CODE_COVERAGE=NO MACH_O_TYPE=staticlib DEFINES_MODULE=NO"
######################
# Build Simulator Frameworks
######################
SIM_BUILD_SHELL_PREFIX="xcodebuild -workspace ${WORKSPACE_NAME}.xcworkspace -scheme ${SCHEME_NAME} -sdk iphonesimulator -configuration ${CONFIGURATION}"
SIM_BUILD_SHELL="${SIM_BUILD_SHELL_PREFIX} ${BUILD_SETTINGS} EXCLUDED_ARCHS=arm64 clean build"
echo "------ Build Simulator Framework ------"
echo "${SIM_BUILD_SHELL}"
${SIM_BUILD_SHELL} 2>&1
SIM_FRAMEWORK_TARGET_DIR=`${SIM_BUILD_SHELL_PREFIX} -showBuildSettings | grep "\<BUILT_PRODUCTS_DIR" | sed -e 's/BUILT_PRODUCTS_DIR = //g'`
echo "****** Simulator framework path: ${SIM_FRAMEWORK_TARGET_DIR}"
SIM_COPY_SHELL="cp -r ${SIM_FRAMEWORK_TARGET_DIR}/${FRAMEWORK_NAME}.framework ${SIMULATOR_BUILD_DIR}"
echo "====== SIM COPY SHELL: ${SIM_COPY_SHELL}"
${SIM_COPY_SHELL}
######################
# Build Device Frameworks
######################
DEVICE_BUILD_SHELL_PREFIX="xcodebuild -workspace ${WORKSPACE_NAME}.xcworkspace -scheme ${SCHEME_NAME} -sdk iphoneos -configuration ${CONFIGURATION}"
DEVICE_BUILD_SHELL="${DEVICE_BUILD_SHELL_PREFIX} ${BUILD_SETTINGS} clean build"
echo "------ Build Device Framework ------"
echo "${DEVICE_BUILD_SHELL}"
${DEVICE_BUILD_SHELL} 2>&1
DEVICE_FRAMEWORK_TARGET_DIR=`${DEVICE_BUILD_SHELL_PREFIX} -showBuildSettings | grep "\<BUILT_PRODUCTS_DIR" | sed -e 's/BUILT_PRODUCTS_DIR = //g'`
echo "****** Device framework path: ${DEVICE_FRAMEWORK_TARGET_DIR}"
DEVICE_COPY_SHELL="cp -r ${DEVICE_FRAMEWORK_TARGET_DIR}/${FRAMEWORK_NAME}.framework ${DEVICE_BUILD_DIR}"
echo "====== DEVICE COPY SHELL: ${DEVICE_COPY_SHELL}"
${DEVICE_COPY_SHELL}
######################
# Copy files Framework
######################
cp -r "${DEVICE_LIBRARY_PATH}/." "${UNIVERSAL_LIBRARY_PATH}"
######################
# Make an universal binary
######################
lipo "${SIMULATOR_LIBRARY_PATH}/${FRAMEWORK_NAME}" "${DEVICE_LIBRARY_PATH}/${FRAMEWORK_NAME}" -create -output "${UNIVERSAL_LIBRARY_PATH}/${FRAMEWORK_NAME}" | echo
# For Swift framework, Swiftmodule needs to be copied in the universal framework
if [ -d "${SIMULATOR_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/" ]; then
cp -f ${SIMULATOR_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/* "${UNIVERSAL_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/" | echo
fi
if [ -d "${DEVICE_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/" ]; then
cp -f ${DEVICE_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/* "${UNIVERSAL_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/" | echo
fi
cp -r "${UNIVERSAL_LIBRARY_PATH}" "${FRAMEWORK_TARGET_PATH}"
######################
# Move Final Bundles
######################
FRAMEWORK_FINAL_PATH="${FRAMEWORK_TARGET_PATH}/${FRAMEWORK_NAME}.framework"
FRAMEWORK_BUNDLES="${FRAMEWORK_FINAL_PATH}/*.bundle"
mv ${FRAMEWORK_BUNDLES} "${FRAMEWORK_TARGET_PATH}"
######################
# Remove Bundles
######################
SIMULATOR_LIBRARY_BUNDLES="${SIMULATOR_LIBRARY_PATH}/*.bundle"
DEVICE_LIBRARY_BUNDLES="${DEVICE_LIBRARY_PATH}/*.bundle"
UNIVERSAL_LIBRARY_BUNDLES="${UNIVERSAL_LIBRARY_PATH}/*.bundle"
echo "---------- **** Remove Bundles **** ----------"
echo "Simulator Bundles: ${SIMULATOR_LIBRARY_BUNDLES}"
echo "Device Bundles: ${DEVICE_LIBRARY_BUNDLES}"
echo "Universal Bundles: ${UNIVERSAL_LIBRARY_BUNDLES}"
rm -rf ${SIMULATOR_LIBRARY_BUNDLES}
rm -rf ${DEVICE_LIBRARY_BUNDLES}
rm -rf ${UNIVERSAL_LIBRARY_BUNDLES}
FWK_PRIVATE_HEADERS_PATH="${FRAMEWORK_FINAL_PATH}/PrivateHeaders"
rm -rf ${FWK_PRIVATE_HEADERS_PATH}
echo -e "Framework is in \033[31m ${FRAMEWORK_TARGET_PATH} \033[0m"
if [ ${REVEAL_ARCHIVE_IN_FINDER} = true ]; then
open "${FRAMEWORK_TARGET_PATH}/"
fi
make-project
#!/bin/bash
function usage() {
echo
echo "Usage:"
echo
echo -e " \033[31m $ maia-project PROJECT-NAME \033[0m"
echo
echo " maia-project, 輸出標(biāo)準(zhǔn)的Maia-iOS私有庫項(xiàng)目工程窖壕,PROJECT-NAME為必須參數(shù)"
echo
}
if [[ $# -gt 0 ]]; then
projectName="$1"
if [[ -d $projectName ]]; then
echo -e "項(xiàng)目 [ \033[31m ${projectName} \033[0m ] 已存在。"
else
echo -e "待創(chuàng)建的項(xiàng)目為:\033[31m ${projectName} \033[0m"
echo "創(chuàng)建項(xiàng)目 ${projectName} ..."
mkdir $projectName
cd $projectName
echo "創(chuàng)建Frameworks文件夾 ..."
mkdir Frameworks
echo "創(chuàng)建Assets文件夾 ..."
mkdir Assets
touch Assets/.gitkeep
read -p "請輸入組件庫的版本號杉女,直接回車默認(rèn)為1.0.0 : " app_version
if [[ $app_version == "" ]]; then
app_version="1.0.0"
fi
read -p "請輸入項(xiàng)目簡介瞻讽,直接回車默認(rèn)為項(xiàng)目簡介 : " project_info
if [[ $project_info == "" ]]; then
project_info="項(xiàng)目簡介"
fi
read -p "請輸入項(xiàng)目描述,直接回車默認(rèn)為項(xiàng)目描述 : " project_desc
if [[ $project_desc == "" ]]; then
project_desc="項(xiàng)目描述"
fi
read -p "請輸入最低支持的iOS系統(tǒng)版本熏挎,直接回車默認(rèn)為8.0 : " miniVersion
if [[ $miniVersion == "" ]]; then
miniVersion="8.0"
fi
read -p "請輸入作者姓名速勇,直接回車默認(rèn)為黃于 : " author
if [[ $author == "" ]]; then
author="黃于"
fi
read -p "請輸入作者郵箱,直接回車默認(rèn)為huangyu20@longfor.com : " author_email
if [[ $author_email == "" ]]; then
author_email="huangyi20@longfor.com"
fi
echo ""
echo "============================================================"
echo ""
echo "版本號 : ${app_version}"
echo "應(yīng)用描述 : ${project_info}"
echo "應(yīng)用簡介 : ${project_desc}"
echo "最低支持的iOS系統(tǒng)版本 : ${miniVersion}"
echo "作者 : ${author}"
echo "作者郵箱 : ${author_email}"
echo ""
echo "============================================================"
echo ""
echo "生成Podspec文件 ..."
podFile=$projectName.podspec
echo "#" > $podFile
echo "# Be sure to run \`pod lib lint ${podFile}\` to ensure this is a" >> $podFile
echo "# valid spec before submitting." >> $podFile
echo "#" >> $podFile
echo "# Any lines starting with a # are optional, but their use is encouraged" >> $podFile
echo "# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html" >> $podFile
echo "#" >> $podFile
echo "" >> $podFile
echo "Pod::Spec.new do |s|" >> $podFile
echo "" >> $podFile
echo " s.name = '${projectName}'" >> $podFile
echo " s.version = '${app_version}'" >> $podFile
echo " s.summary = '${project_info}'" >> $podFile
echo " s.description = <<-DESC" >> $podFile
echo " ${project_desc}" >> $podFile
echo " DESC" >> $podFile
echo "" >> $podFile
echo " s.homepage = 'http://git.xxxxx.net/ios/${projectName}'" >> $podFile
echo " s.license = { :type => 'Copyright', :text => 'Copyright 2018 - 2020 longfor.com. All rights reserved.\n' }" >> $podFile
echo " s.authors = { '${author}' => '${author_email}' }" >> $podFile
echo "" >> $podFile
echo " s.ios.deployment_target = '${miniVersion}'" >> $podFile
echo "" >> $podFile
echo " s.source = { :git => 'http://git.xxxxx.net/ios/${projectName}.git', :tag => s.version.to_s }" >> $podFile
echo "" >> $podFile
echo " # s.resource = 'Assets/icon.png'" >> $podFile
echo " # s.resources = 'Assets/Resources/*.png'" >> $podFile
echo "" >> $podFile
echo " s.vendored_frameworks = 'Frameworks/*.framework'" >> $podFile
echo " # s.frameworks = 'CoreLocation', 'Foundation', 'UIKit', 'SystemConfiguration', 'AdSupport', 'Security', 'CoreTelephony'" >> $podFile
echo "" >> $podFile
echo " # s.library = 'sqlite3.0'" >> $podFile
echo " # s.libraries = 'sqlite3.0','c++'" >> $podFile
echo "" >> $podFile
echo " s.requires_arc = true" >> $podFile
echo "" >> $podFile
echo " # s.xcconfig = { 'HEADER_SEARCH_PATHS' => '\$(SDKROOT)/usr/include/libxml2' }" >> $podFile
echo " # s.dependency 'JSONKit', '~> 1.4'" >> $podFile
echo "" >> $podFile
echo "end" >> $podFile
echo "綁定Git ..."
git init
# 關(guān)聯(lián)遠(yuǎn)程倉庫
git remote add origin http://git.xxxxx.net/ios/$projectName.git
fi
else
usage
fi