用于 Harness 功能标志的 iOS SDK
使用此 README 文件开始使用我们的 iOS 功能标志 (FF) SDK。本指南概述了开始使用 SDK 的基础知识,并提供了一个完整的代码示例以进行测试。
此示例不包括配置选项,有关深入了解步骤和配置 SDK 的说明,例如禁用流或使用我们的中继代理,请参阅 iOS SDK 参考。
有关功能标志 iOS SDK 示例项目,请参阅 我们的测试 iOS 项目。
需求
要使用此 SDK,请确保您已
- 安装 XCode 以使用 Swift 包管理器 (SPM),CocoaPods 或 Carthage
为了跟随我们的测试代码示例,请确保您已
- 在 Harness 平台上创建了一个名为
harnessappdemodarkmode
的功能标志 - 创建了一个 服务器/客户端 SDK 密钥,并对其进行了复制
安装 SDK
安装 iOS SDK 有多种方法
Swift 包管理器 (SPM)
Swift Package Manager 是集成在 swift
编译器和 Xcode
中的一个依赖管理器。
要将 ff-ios-client-sdk
集成到 Xcode 项目中,在 文件
下拉菜单中,选择 添加包
。在这里,在搜索栏中搜索 url https://github.com/harness/ff-ios-client-sdk.git
,然后单击 添加包
按钮。
或者
您还可以通过将 SDK 文件夹拖入项目的根目录并在您的 Package.swift
文件的依赖项部分中添加它,局部添加 ff-ios-client-sdk
依赖项。
dependencies: [
.package(url: "https://github.com/harness/ff-ios-client-sdk.git", .upToNextMinor(from: "1.1.0"))
]
CocoaPods
CocoaPods 是用于 Swift 和 Objective-C Cocoa 项目的依赖管理器。它拥有超过 81,000 个库,并在超过 3,000,000 个应用程序中使用。CocoaPods 可以帮助您优雅地扩展项目。
CocoaPods 使用 Ruby 构建,并且可以使用 macOS 上的默认 Ruby 安装。您可以使用 Ruby 版本管理器,但是我们建议除非您知道自己在做什么,否则使用 macOS 上的标准 Ruby。
使用默认 Ruby 安装将需要在安装 gems 时使用 sudo。(但这仅在 gem 安装期间是一个问题。)
$ sudo gem install cocoapods
安装完 cocoapods 后,从您的根项目文件夹开始,在终端中输入以下命令创建一个 Podfile
。它将位于您项目的根文件夹中
$ pod init
要将 ff-ios-client-sdk
导入您的 .xcproject
,只需将 ff-ios-client-sdk
添加到您刚创建的 Podfile 并保存 Podfile更改即可。
platform :ios, '10.0'
use_frameworks!
target 'MyApp' do
pod 'ff-ios-client-sdk'
end
接下来,您只需运行下一个命令来安装您的包。
pod install
**注意**:将创建一个新的.xcworkspace
文件,您应从现在起使用该文件而不是您的.xcodeproj
文件,以便使用导入的Pods。
Carthage
Carthage旨在以最简单的方式将框架添加到您的Cocoa应用程序中。Carthage构建您的依赖关系并提供二进制框架,但您仍完全控制项目结构和设置。Carthage不会自动修改项目文件或构建设置。为了将ff-ios-client-sdk
集成到您的应用程序中,您需要遵循以下步骤。导航到项目根目录并创建一个Cartfile
文件。这是一个您将输入所有计划与Carthage一起使用的依赖项的文件。您可以通过在项目根目录的终端中输入以下内容来创建它:
touch Cartfile
然后,打开Cartfile
,您可以复制/粘贴以下行并保存更改。
github "harness/ff-ios-client-sdk"
现在,您需要运行:
carthage update --no-build
此命令将从Cartfile
中指定的存储库获取ff-ios-client-sdk
的源代码。
现在,您将在与您的Cartfile
和.xcodeproj
相同的目录下看到一个名为Carthage
的新文件夹。在Carthage
文件夹中,您将看到一个名为Checkout
的其他文件夹,源代码就在那里。接下来,我们需要为ff-ios-client-sdk
依赖项创建一个项目。我们可以在终端中通过以下方式轻松执行此操作。
//From your project's root folder
cd Carthage/Checkouts/ff-ios-client-sdk
然后
swift package generate-xcodeproj
...或者,您可以在同一行上输入所有内容。
//From your project's root folder
cd Carthage/Checkouts/ff-ios-client-sdk && swift package generate-xcodeproj
回到项目根目录并输入下一个命令
carthage build --use-xcframeworks --platform iOS
此命令将构建项目并将它放在与Checkouts
相邻的Build
文件夹中。在您应用程序目标“常规”设置选项卡中的“框架、库和嵌入内容”部分,从Carthage/Build
文件夹中拖放.xcframework
文件。在“嵌入”部分,选择“嵌入并签名”。
现在只剩下最后一件事情要做
import ff_ios_client_sdk
...无论您需要在哪个地方使用ff-ios-client-sdk
当新的ff-ios-client-sdk
版本可用并且您想更新此依赖项时,运行
$ carthage update --use-xcframeworks --platform iOS
您的嵌入式库将得到更新。
代码示例
以下是一个完整的代码示例,您可以使用它来测试在Harness平台上创建的harnessappdemodarkmode
标志。运行代码后,它将
- 连接到FF服务。
- 每10秒报告一次旗标的值,直到连接关闭。每次在Harness平台上切换
harnessappdemodarkmode
旗标的开/关状态时,都会报告更新后的值。 - 关闭SDK。
要使用此示例,将其复制到您的项目中,并将您的SDK密钥输入到apiKey
字段。
import UIKit
import ff_ios_client_sdk
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NSLog("Start")
let config = CfConfiguration.builder()
.setStreamEnabled(true)
.build()
let target = CfTarget.builder().setIdentifier("Harness").build()
CfClient.sharedInstance.initialize(
apiKey: "apiKey",
configuration:config,
target: target
) { [weak self] result in
switch result {
case .failure(let error):
NSLog("End: Error \(error)")
case .success():
NSLog("Init: Ok")
CfClient.sharedInstance.boolVariation(evaluationId: "EVALUATION_ID", { (eval) in
print("Value: \(eval!)")
})
CfClient.sharedInstance.registerEventsListener() { (result) in
switch result {
case .failure(let error):
print(error)
case .success(let eventType):
switch eventType {
case .onPolling:
print("Event: Received all evaluation flags")
case .onEventListener(let evaluation):
print("Event: Received an evaluation flag, \(evaluation!)")
case .onComplete:
print("Event: SSE stream has completed")
case .onOpen:
print("Event: SSE stream has been opened")
case .onMessage(let messageObj):
print(messageObj?.event ?? "Event: Message received")
}
}
}
}
}
}
override func viewWillDisappear(_ animated: Bool) {
CfClient.sharedInstance.destroy()
NSLog("End: Ok")
super.viewWillDisappear(animated)
}
}
阅读更多内容
有关更多示例和配置选项
有关功能标志的更多信息,请参阅我们的功能标志文档。