DFUDependence 2.8.3

DFUDependence 2.8.3

许可协议 MIT
发布上次发布2018年10月

chensg 维护。



  • 作者
  • ttlock

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];   
  1. 启动蓝牙
[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/