自己封装的SDK.framework,需要打log或者请求网络的时候要标明当前sdk的版本,手动改版本不保证100%会改。
一.自建脚本动态修改
写了个脚本动态改代码中的某段代码,和info.plist的version。Library为framework名称,Include为framework的任意一个类。里面有个version方法用来给framework内部调用获取sdk版本。
1 2 3 4 |
+(NSString*)version{ //自动更改 不要手动更改 return @"Version-201911251534-iOS"; } |
framework的target中build phases中新建runscript脚本,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
if [[ $CONFIGURATION == Release ]] && [[ $EFFECTIVE_PLATFORM_NAME == "-iphoneos" ]]; then CLASS_PATH="${SRCROOT}/Library/Include.m" CLASS_PATH2="${SRCROOT}/Library/Include2.m" echo ${CLASS_PATH} time=$(date "+%Y%m%d%H%M") echo $time #sed 's/-[^_].*-/-1.0.8-/' ${CLASS_PATH} > ${CLASS_PATH2} | mv ${CLASS_PATH2} ${CLASS_PATH} sed "s/-[^_].*-/-${time}-/" ${CLASS_PATH} > ${CLASS_PATH2} if [ ! -f ${CLASS_PATH2} ];then echo "未成功" else mv ${CLASS_PATH2} ${CLASS_PATH} plist=${INFOPLIST_FILE} /usr/libexec/PlistBuddy -c "Set CFBundleShortVersionString $time" "${plist}" fi else echo $CONFIGURATION "当前不为 Release Configuration" fi |
脚本打包前修改了Include.m的version返回值实现动态版本号。同时也修改了framework的info.plist版本号便于他人查看(注:info.plist在sdk中是读不到的)。
这里使用的是当前时间为版本号,可以根据自己需求制定。
EFFECTIVE_PLATFORM_NAME== "-iphoneos"判断是为了防止制作通用静态库的时候执行两次。只在真机模式下执行一次即可,不需要可以去掉。
二.官方方法
创建framework target的时候会自动生成一个 Library.h头文本
1 2 3 4 5 6 7 8 9 |
#import <UIKit/UIKit.h> //! Project version number for Library. FOUNDATION_EXPORT double LibraryVersionNumber; //! Project version string for Library. FOUNDATION_EXPORT const unsigned char LibraryVersionString[]; // In this header, you should import all the public headers of your framework using statements like #import <Library/PublicHeader.h> |
这个值可以在Xcode中配置,然后引用方或者自己的sdk中就可以通过代码直接访问版本号了,
工程名->Targets->YourLibrary->Build Settings->Versioning->Current Project Version
可以手动设置当前framework的版本号,framework build同时也会往生成的framework info.plist中写入版本号。
把Versioning System设置成Apple Genneric以后,同样可以在runscript脚本中运行agvtool命令来达到自动增加版本号的目的。
1 2 3 |
${DEVELOPER_BIN_DIR}/agvtool bump -all #${DEVELOPER_BIN_DIR}/agvtool next-version -all |
but经过实践。。。如果用runscript中自动执行上边脚本后,只有info.plist实时变更了,Xcode中的版本并没有实时变更,反应比较慢。这样会导致打出来的版本代码获取与查看info.plist不一致的情况。
Done。
转载请注明:天狐博客 » iOS开发之framework动态改版本号