TTLock.framework
最低 iOS 目标
iOS 8.0
最低 Xcode 版本
Xcode 10
安装
通过 Cocoapods
首先,将以下行添加到您的 Podfile 中
use_frameworks!
target '您的应用程序目标名称' do
pod 'TTLock'
end
其次,将 TTLock 安装到您的项目中
pod install
手动
1. 将 TTLock.framework 拖动到您的项目中。
2. 高亮显示目标 -> '通用' -> '已安装包', 添加上面的框架。
3. 高亮显示目标 -> 构建阶段 -> 链接二进制与库, 然后将 CoreBluetooth.framework 添加到您的项目中。
4. 如果需要上传到 App Store,请参阅本文档最后一条“动态框架上传到App Store”的内容。
如果需要将设备升级到您的应用程序,除了添加 TTLockDFU.framework 和 DFUDependence.framework 外,还应这样做
通过 Cocoapods
首先,将以下行添加到您的 Podfile 中
use_frameworks!
target '您的应用程序目标名称' do
pod 'TTLockDFU'
end
其次,将 TTLock 安装到您的项目中
pod install
手动
1. 将 TTLock.framework、TTLockDFU.framework 和 DFUDependence.framework 拖动到您的项目中。
2. 高亮显示目标 -> '通用' -> '已安装包', 添加上面的三个框架。
3. 高亮显示目标 -> 构建设置 -> Always Embed Swift Standard Libraries,然后设置为 'YES'。
4. 高亮显示目标 -> 构建阶段 -> 链接二进制与库, 然后将 CoreBluetooth.framework 添加到您的项目中。
5. 如果需要上传到 App Store,请参阅本文档最后一条“动态框架上传到App Store”的内容。
介绍
TTLock
TTLock 旨在通过手机蓝牙与设备通信。TTLockGateway 已设计用于轻松与 Wi-Fi 模块通信。
TTLockDFU (设备固件更新)
TTLockDFU已设计,使得通过手机蓝牙轻松将设备升级到您的应用变得简单。
用法
TTLock 用法
1.导入头文件
#import <TTLock/TTLock.h>
2.TTLock 对象的代理必须采用 TTSDKDelegate 协议。为 TTLock 创建一个单例对象
<TTSDKDelegate>
TTLock *TTObject = [[TTLock alloc]initWithDelegate:self];
- 启动蓝牙
[TTObject setupBlueTooth];
```
4. Do you want to open the SDK log? YES print, NO does not print, and defaults to No
```objective-c
[TTLock setDebug:YES];
```
5.Executing the following code in the callback {@link TTManagerDidUpdateState:} what is Bluetooth state changing:
```objective-c
if (state == TTManagerStatePoweredOn) {
[_TTObject startBTDeviceScan:YES];
}else if (state == TTManagerStatePoweredOff){
[_TTObject stopBTDeviceScan];
}else if (state == TTManagerStateUnsupported){
NSLog(@"Your device does not support ble4.0, unable to use our app.");
}
6.扫描设备后,会执行代理方法 {@link onFoundDevice_peripheralWithInfoDic:},您可以获取外围设备的基本信息,例如,蓝牙名称、MAC地址、isAllowUnlock、isContainAdmin 等。
7.通过 lockMac 连接锁
[TTObject connectPeripheralWithLockMac:(NSString *)lockMac];
6.成功连接后,将执行代理方法 {@link onBTConnectSuccess_peripheral:lockName:}。
在这个方法中,首先,您应该执行以下代码
[TTObject stopBTDeviceScan];
其次,您应该执行以下代码
TTObject.uid = openid;//In order to record who operates the lock
最后,您可以调用添加管理员、开锁等接口
7.调用相应接口后可以接收相应的回调,成功回调为成功,错误回调为 {@link TTError:command:errorMsg:}。
8.在回调中都执行以下代码 {@link onBTDisconnect_peripheral:}
[TTObject startBTDeviceScan];
场景:添加管理员
1.扫描附近的设备
2.连接你想添加管理员的那把锁(只有当这把锁中没有管理员时,你才能添加,你可以通过参数 'isContainAdmin' 进行判断)
[TTObject connect:peripheral];(This parameter 'peripheral' is in the callback 'onFoundDevice_peripheralWithInfoDic')
3.连接成功后,可以调用蓝牙接口 {@link addAdministrator_addDic:}。
4.在接收到回调 {@link onAddAdministrator_addAdminInfoDic:} 后,使用网络接口(v3/lock/init)上传数据
场景:删除锁
三代锁管理员删除锁
1、连接你想删除的锁,然后调用蓝牙接口 {@link resetLock_adminPS:lockKey:aesKey:version: unlockFlag:}。
2、收到回调后调用网络接口 'v3/key/delete'。
除了三代锁管理员
1、直接调用网络接口 'v3/key/delete'。
场景:解锁
1.管理员调用蓝牙接口 {@link unlockByAdministrator_adminPS:lockKey:aesKey:version:unlockFlag:unlockFlag:uniqueid:timezoneRawOffset:},Ekey 在连接您要解锁的锁后调用蓝牙接口 {@unlockByUser_lockKey:aesKey:startDate:endDate:version:unlockFlag:uniqueid:timezoneRawOffset:}。
2.在收到成功的回调 {@onUnlockWithLockTime:} 之后,调用电锁时间接口 {@link setLockTime_lockKey:aesKey:version:unlockFlag:referenceTime:timezoneRawOffset:}。
3.接收成功的回调 {@link onSetLockTime}。
注意事项
TTLock 注意事项
1.如果您需要同时调用多个蓝牙接口,您必须在之前接口回调之后调用以下接口。
例如,您想解锁并校准时间。
错误示例
-(void)onBTConnectSuccess_peripheral:(CBPeripheral )peripheral lockName:(NSString)lockName{
// 解锁
[TTObject unlockByUser_lockKey:lockKey aesKey:aesKeyStr startDate:startDate endDate:endDate version:version unlockFlag:unlockFlag uniqueid:uniqueid timezoneRawOffset:timezoneRawOffset];
// 校准时间
[TTObject setLockTime_lockKey:lockKey aesKey:aesKeyStr version:version unlockFlag:unlockFlag referenceTime:referenceTime timezoneRawOffset:timezoneRawOffset];
}
正确示例
-(void)onBTConnectSuccess_peripheral:(CBPeripheral *)peripheral lockName:(NSString*)lockName{
// unlock
[TTObject unlockByUser_lockKey:lockKey aesKey:aesKeyStr startDate:startDate endDate:endDate version:version unlockFlag:unlockFlag uniqueid:uniqueid timezoneRawOffset:timezoneRawOffset];
}
//after receiving the callback of unlock successfully
-(void)onUnlockWithLockTime:(NSTimeInterval)lockTime{
//calibrate time
[TTObject setLockTime_lockKey:lockKey aesKey:aesKeyStr version:version unlockFlag:unlockFlag referenceTime:referenceTime timezoneRawOffset:timezoneRawOffset];
}
2.回调 {@link onFoundDevice_peripheralWithInfoDic:} 将扫描所有附近的受支持设备,只需连接您真正需要的设备。
3.在 TTLock 中的所有回调都在子线程中。
4.为了记录谁操作了锁,您在发送回调指令到{@link onBTConnectSuccess_peripheral:lockName:}之前,应该为属性 'uid' 分配值。
TTObject.uid = openid;
5.{@link connectPeripheralWithLockMac:}连接尝试不会超时。当释放 外围设备 时,挂起的尝试会自动取消,也可以通过 {@link cancelConnectPeripheralWithLockMac:} 显式取消。
{@link connect:}连接尝试不会超时。当释放 外围设备 时,挂起的尝试会自动取消,也可以通过 {@link disconnect:} 显式取消。
动态框架已上传到AppStore
第一步:将Run Script步骤添加到构建步骤中,放在嵌入框架步骤之后,将其设置为使用 /bin/sh,并输入以下脚本
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
EXTRACTED_ARCHS=()
for ARCH in $ARCHS
do
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done
echo "Merging extracted architectures: ${ARCHS}"
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"
echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
done
脚本将遍历您的构建应用程序的Frameworks文件夹,并确保每个框架中只包含您正在构建的架构。
第二步:将导入的动态框架路径添加到输入文件
参考资料: http://ikennd.ac/blog/2015/02/stripping-unwanted-architectures-from-dynamic-libraries-in-xcode/