iOS制作framework

来源:互联网 发布:p5.js 类库 编辑:程序博客网 时间:2024/06/10 08:51
#xcodebuild -project hvui.xcodeproj -target FrameworkMaker_Release;rm -rf build;
productName="${PROJECT_NAME}"
target="${productName}"
tmpDir="${PROJECT_TEMP_DIR}/build"
rm -rf "${tmpDir}"#清除编译临时文件

#编译bundle
xcodebuild -target "${PROJECT_NAME}Bundle" -configuration "Release" -sdk "iphoneos" build SYMROOT="${tmpDir}" ONLY_ACTIVE_ARCH="NO" VALID_ARCHS="arm64 armv7 armv7s i386 x86_64"

function buildLibs(){
    sdks=("iphonesimulator" "iphoneos")
    configurations=("Debug" "Release")
    for configuration in ${configurations[@]}
    do
    for sdk in ${sdks[@]}
    do
    xcodebuild -target "${target}" -configuration "${configuration}" -sdk "${sdk}" build SYMROOT="${tmpDir}" ONLY_ACTIVE_ARCH="NO" VALID_ARCHS="arm64 armv7 armv7s i386 x86_64"
    done
    done
}
function lipoLibs(){
    #copy Release-iphoneos到 Frameworks 目录,然后 lipo -c 一份
    ios_libs_dir="${SRCROOT}/../ios_libs"
    frameworkDir="${ios_libs_dir}/Frameworks"
    [ -d "${frameworkDir}" ] || mkdir -p "${frameworkDir}"
    cp -r "${ios_libs_dir}/Release-iphoneos/${productName}.framework" "${frameworkDir}/"
    #lipo -c ... -o ..
    lipo -c "${ios_libs_dir}/Release-iphoneos/${productName}.framework/${productName}" "${ios_libs_dir}/Release-iphonesimulator/${productName}.framework/${productName}" -o "${frameworkDir}/${productName}.framework/${productName}"
    rm -rf "${frameworkDir}/${productName}.framework/_CodeSignature"
}
function rmLibs(){
    ios_libs_dir="${SRCROOT}/../ios_libs"
    sdks=("iphonesimulator" "iphoneos")
    configurations=("Release")
    for configuration in ${configurations[@]}
    do
    for sdk in ${sdks[@]}
    do
    rm -rf "${ios_libs_dir}/${configuration}-${sdk}/${productName}.framework"
    done
    done
}
buildLibs
lipoLibs

#rmLibs
#cp to ios_libs

#cp -Rf "${SRCROOT}/ios_libs/Frameworks/${productName}.framework" "${SRCROOT}/../ios_libs/Frameworks/${productName}.framework"










$(SRCROOT)/../ios_libs/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)



以上代码需要加入到的地方自行百度。下边说一个注意情况:

如果,将上边生成的framework导入到新工程运行报错了,且报错如下图:

dyld`__abort_with_payload:
    0x10055ef40 <+0>:  mov    x16, #0x209
    0x10055ef44 <+4>:  svc    #0x80
->  0x10055ef48 <+8>:  b.lo   0x10055ef60               ; <+32>

或者:image not found

这表示,找不到framework被编译后的代码镜像(暂且这么理解吧,其实我觉得也不是很准确)

可作如下设置:

targets->general->embedded binaries


这个表示,程序启动的时候,就将使用到的framework编译成二进制文件(暂且这么理解吧,错了不要打我)


OK,成功使用framework,并调用了其中方法。

(对了,看很多的笔记上说遇到上边运行不了的情况,要改这改那,但是本宝宝,别的地方没动,制动了上边截图的一处就可以了,如果还是运行不了的话,看看你生成的framework是否是支持模拟器和真机的)








原创粉丝点击