综合

使用动态framework封装微信SDK实践2019-11-14

2019-11-14  本文已影响0人  勇往直前888

需求

对外提供一个SDK,功能是拉起微信小程序。

分析

企业微信截图_894f5cc0-cc1d-43fc-846e-4fbab3c5a10f.png

既然这样,封装一层my.a又有什么意义,直接使用libWeChatSDK.a不就行了?

结论:使用动态framework封装WeChatSDK1.8.4实现拉起微信小程序的功能

开发动态framework

Setp1: 创建framework工程

framework的名字为工程名字,Xcode的菜单路径为File->New->Project...,在弹出菜单中,类型选择framework

企业微信截图_af4ebfbd-6e81-472e-8a92-6e89493db8c4.png

工程创建完成后,会自动生成一个和framework同名的h文件,这个文件是必须的,不能删除。

企业微信截图_0bd3e7f9-4b21-40ab-b547-527075ec5f80.png

Setp2: 修改输出文件

企业微信截图_8add109c-e94f-4402-a0bb-76e0bbe754dc.png 企业微信截图_1ba5ccb5-ead8-4f9f-aec7-db2f8f3b6afe.png

Step3:导入微信SDK

企业微信截图_9b730ab9-3209-4970-aaef-c56d056ae40d.png

Step4:创建调试Target

企业微信截图_6a7f0596-a7a0-4e6c-ba8d-e03a33cbdfe3.png 企业微信截图_2e75a0b0-4e72-40b0-af4b-3d25b8ceca67.png

合并framework

生成的framework要么是真机的,要么是模拟器的,很不方便。用命令行也比较烦,用脚本的方式比较好。

企业微信截图_58d63202-320f-4197-8a9d-0b55fceeb8b3.png
if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework
DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework
SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
#ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"
lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"
open "${DEVICE_DIR}"
open "${SRCROOT}/Products"
fi
企业微信截图_38d58813-c1a5-4394-9143-3db2260fc698.png

Step5: Demo工程

注意:如果要提交苹果市场,只能用真机版本的framework,否则会出错。

企业微信截图_318404b0-b634-446d-9024-3b7bfcf20e36.png

如果不改,崩溃信息一般如下:
dyld: Library not loaded: @rpath/KJTUrlSdk.framework/KJTUrlSdk
Referenced from: /var/mobile/Containers/Bundle/Application/CFEEFAD2-1BF3-4D29-967B-42CAAB7C4811/KJTUrlSdk-Demo.app/KJTUrlSdk-Demo
Reason: image not found

最后的样子:经过以上各步骤,最后的文件结构样子大致如下

企业微信截图_46c1c67c-ca66-408c-8b50-0b37fb30f330.png

微信SDK依赖系统库

企业微信截图_071c4e89-edfd-42bb-b371-fda4f64fc562.png

注册函数导致崩溃。

[__NSArrayM enqueue:]: unrecognized selector sent to instance

企业微信截图_9af8874b-d246-40ce-a716-20915a36e158.png

检查微信是否安装函数不可用

这是因为微信SDK使用[[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"weixin://"]]方式来检查是否安装微信。iOS9之后,要在Plist中加白名单才可以用。不然这个函数始终返回NO

企业微信截图_f9a9e6c0-4a8a-4a42-bcd9-bb8627a8c788.png

[WXApi isWXAppInstalled]

应用BundleID信息校验不通过

企业微信截图_c5762cab-aeca-4548-a837-7a65b9c81af1.png 企业微信截图_4af8688e-f225-4038-b029-e6f06d434355.png

framework的版本号

企业微信截图_6f17cd00-b1df-47c5-bd55-4e439f73c8d2.png 企业微信截图_662decb7-c7c7-4fd6-b585-58bb9fc730d2.png
    NSLog(@"数字版本号:%f", KJTUrlSdkVersionNumber); // 数字版本号:1.200000
    NSLog(@"字符数组版本号:%s", KJTUrlSdkVersionString); // 字符数组版本号:@(#)PROGRAM:KJTUrlSdk  PROJECT:KJTUrlSdk-1.2.3.4

如何生成Release模式的framework?

image.png
上一篇下一篇

猜你喜欢

热点阅读