配置工程
配置说明
鹰眼iOS SDK V3.0及以上版本支持所有的模拟器和真机CPU架构,开发者可以使用lipo命令,根据自身的需要合成自己所需的SDK。
注:鹰眼iOS SDK V3.12版本已适配iOS 14,开发者需根据以下配置进行适配。
合成自己需要的CPU架构(可选)
可以直接使用鹰眼iOS SDK进行开发测试,但是上架到APP STORE时,由于苹果公司的要求,只能使用真机对应CPU架构的SDK,所以需要开发者需要使用lipo命令合成自身需要的CPU架构版本的SDK。lipo命令的使用方法如下:
1检查当前库支持的CPU架构:
输入命令:
lipo -info ./BaiduTraceSDK.framework/BaiduTraceSDK
终端回显:
Architectures in the fat file: ./BaiduTraceSDK.framework/BaiduTraceSDK are: i386 x86_64 armv7 armv7s arm64
2剥离所需的CPU架构,以arm64和armv7为例:
输入命令:
mkdir armv7
mkdir arm64
lipo ./BaiduTraceSDK.framework/BaiduTraceSDK -thin arm64 -output ./arm64/BaiduTraceSDK
lipo ./BaiduTraceSDK.framework/BaiduTraceSDK -thin armv7 -output ./armv7/BaiduTraceSDK
3检查上一步剥离出来的库所支持的CPU架构是否符合需求:
输入命令:
lipo -info ./arm64/BaiduTraceSDK
终端回显:
Non-fat file: ./arm64/BaiduTraceSDK is architecture: arm64
输入命令:
lipo -info ./armv7/BaiduTraceSDK
终端回显:
Non-fat file: ./armv7/BaiduTraceSDK is architecture: armv7
4将剥离出来的库合并成所需的库,替换framework中的库
输入命令:
lipo -create ./armv7/BaiduTraceSDK ./arm64/BaiduTraceSDK -output ./BaiduTraceSDK.framework/BaiduTraceSDK
5清理刚才过程中的中间产物:
输入命令:
rm -rf ./arm64
rm -rf ./armv7
6检查framework中的库支持的CPU架构
输入命令:
lipo -info ./BaiduTraceSDK.framework/BaiduTraceSDK
终端回显:
Architectures in the fat file: ./BaiduTraceSDK.framework/BaiduTraceSDK are: armv7 arm64
7完成
导入SDK
选择需要的Target,将 BaiduTracekSDK.framework 拖入其General选项卡中的Embedded Binaries栏即可。拖入之后Linked Framework and Libraries栏也会显示 BaiduTraceSDK.framework 项,同时检查 Build Phases 选项卡中的 Embed Frameworks 栏和 Link Binary With Libraries 栏也都显示成功导入 BaiduTraceSDK.framework 项。
plist文件设置
APP在声明定位权限时(用作APPStore上架审核),自鹰眼iOS SDK V3.1.1版本开始支持开发者声明“仅需要前台定位”或“同时需要前台和后台定位”,结合最终用户定位权限授予情况,两种声明均可实现鹰眼轨迹的采集,两者不同之处在于:
- 声明仅需前台定位:若最终用户授权APP定位权限(允许一次/使用APP期间/始终),此时APP在前台时鹰眼可成功采集轨迹,但APP退到后台时APP被杀死可能性较高,易造成轨迹中断。仅声明前台定位权限需在info.plist文件源码中增加以下声明:
<key>NSLocationWhenInUseUsageDescription</key>
<string>文字阐述需要前台定位的原因</string>
- 声明同时需要前台和后台定位:若最终用户授权APP定位权限为“始终”时,不论APP在前台还是后台,APP被杀死概率较低,这种方式可尽量保证轨迹采集不中断。若最终用户授权APP定位权限为“允许一次/使用APP期间”时,APP在前台时鹰眼可成功采集轨迹,退到后台时APP被杀死可能性较高,易造成轨迹中断。同时声明前台和后台定位权限需在info.plist文件源码中增加以下声明:
<key>NSLocationWhenInUseUsageDescription</key>
<string>文字阐述需要前台定位的原因</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>文字阐述需要后台定位的原因</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>文字阐述需要后台定位的原因</string>
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
定位权限申请
1.开发者需结合plist文件中的配置申请相应的定位权限:
- (void)requestLocAuthByPlist {
NSBundle *bundle = [NSBundle mainBundle];
NSObject *accessTypeAlways = [bundle objectForInfoDictionaryKey:@"NSLocationAlwaysUsageDescription"];
NSObject *accessTypeWhen = [bundle objectForInfoDictionaryKey:@"NSLocationWhenInUseUsageDescription"];
NSObject *accessTypeBoth = [bundle objectForInfoDictionaryKey:@"NSLocationAlwaysAndWhenInUseUsageDescription"];
if (accessTypeAlways && accessTypeWhen && accessTypeBoth) {
// 申请前后台定位权限
[self.locationManager requestAlwaysAuthorization];
} else if (accessTypeWhen){
// 申请前台定位权限
[self.locationManager requestWhenInUseAuthorization];
}
}
iOS 14 Beta版适配
1.用户关闭准确位置权限情况下,使用鹰眼服务前开发者可以根据需求选择申请临时精确位置权限:
#pragma mark - CLLocationManagerDelegate
/// 适配iOS14
#ifndef __IPHONE_14_0
#define __IPHONE_14_0 140000
#endif
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_14_0
//监听定位权限状态改变,及时采取合理措施
- (void)locationManagerDidChangeAuthorization:(CLLocationManager *)manager {
if (@available(iOS 14.0, *)) {
NSObject *temporaryUsageDescription = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationTemporaryUsageDescriptionDictionary"];
if (temporaryUsageDescription && self.locationManager.accuracyAuthorization == CLAccuracyAuthorizationReducedAccuracy) {
// iOS14之后根据产品需求申请临时访问精确位置权限
// 1.在info.plist配置
// <key>NSLocationTemporaryUsageDescriptionDictionary</key>
// <dict>
// <key>WantsToTrace</key>
// <string>鹰眼需要高精度定位权限</string>
// </dict>
// 2.申请权限
[self.locationManager requestTemporaryFullAccuracyAuthorizationWithPurposeKey:@"WantsToTrace" completion:^(NSError * _Nullable error) {
NSLog(@"%@", error);
}];
}
} else {
// Fallback on earlier versions
}
}
#endif
- 启用后台位置指示器,进入后台时保留被授予的临时访问权限(精确位置):
//需要在开始采集前设置
[[BTKAction sharedInstance] showsBackgroundLocationIndicator:YES];
[[BTKAction sharedInstance] startGather:self];
为避免这种情况,开发者需要在上架的描述信息中说明清楚,是APP的哪些特性和功能必须要使用后台定位权限。例如百度地图APP的描述信息如下,供参考:
编译选项设置
鹰眼iOS SDK 3.0.6 及以下版本,不支持Bitcode,请确保 Build Settings 选项卡中的 Enable Bitcode 项设置为No。
鹰眼iOS SDK自 3.0.7 版本开始支持Bitcode,官网下载版本为Bitcode版,如果开发者不需要Bitcode支持,可以使用以下命令自行剥离:xcrun bitcode_strip -r BaiduTraceSDK -o BaiduTraceSDK 鹰眼iOS SDK最低支持iOS 8.0系统,请确保 Build Settings 选项卡中的 iOS Deployment Target 不低于iOS8.0。