_________ ___ ___ _ _____ _________ ___ ___
/ / \ \ / / |_| ( ___ \ \__ __/ \ \ / /
/ _____/ \ \ /\ / / | | | ( \/ ) ( \ \/ /
\_____ \ \ \/ \/ / | | | (_ | | \ /
/ \ \ ____ / | | | _) | | ) (
/_______ / \/ \/ |_| | ( | | | |
\/ | ) )_( |__|
|/
_____ ______ ________ ________ ______ __ __ _____ ______ _________
/ \ ( ____\ / / / / ( ____\ | \ | | / \ ( ____\ \______ \
/ \ | ( / ____/ / ____/ | ( | |\ | | / ____\ | ( | \
/ /\ /\ \ | (__ \_____ \ \_____ \ | (__ | | \ | | / /__/ | | (__ | |____\
/ / Y \ \ | __) / \ / \ | __) | | \ | | \______ / | __) | \\
/ / \ \ | ( /_______/ /_______/ | ( | | \| | _____/ / | ( | | \\
|_/ |__| | (___/\ \/ \/ | (___/\ |__| |__| |_______/ | (___/\ |____| |_|
(______/ (______/ (______/
SwiftyMessenger
Swift 工具包,用于在 iOS 应用及其扩展之间传递消息。它创建了一个介于容器应用和 iOS 扩展之间的桥梁。SwiftyMessenger 会将消息存档到文件中,这些文件被写入应用的共享 App Group。SwiftyMessenger 通过没有进程间通信的方式,类似实现了应用和扩展之间的进程间通信。
它还支持 CFNotificationCenter Darwin 通知,以支持实时更改通知。当传递消息时,感兴趣的一方可以监听并(几乎是即时地)在两侧被通知到这些更改。
要求
SwiftyMessenger 版本 | 最低 iOS 目标 | 最低 watchOS 目标 | Swift 版本 |
---|---|---|---|
0.4.0 | iOS 10 | watchOS 3.0 | Swift 5.x |
0.2 | iOS 9 | watchOS 2.0 | Swift 4.2 |
0.1 | iOS 9 | watchOS 2.0 | Swift 4.1 |
注意
SwiftyMessenger 只能与 App Group 标识符和权限一起使用。
CocoaPods
CocoaPods 是 Cocoa 项目的依赖关系管理器。您可以使用以下命令安装它
$ gem install cocoapods
要将SwiftyMessenger集成到您的Xcode项目中并使用CocoaPods,请在您的Podfile中指定它。
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!
target '<Your Target Name>' do
pod 'SwiftyMessenger', '~>0.4.0'
end
Carthage
Carthage是一种去中心化的依赖项管理器,它构建您的依赖关系并提供二进制框架。
您可以使用以下命令使用Homebrew安装Carthage:
brew update
brew install carthage
要使用Carthage将SwiftyMessenger集成到您的Xcode项目中,请在您的Cartfile中指定它。
github "abdullahselek/SwiftyMessenger" ~> 0.4.0
Swift Package Manager
修改您的Package.swift文件以包含以下依赖项。
.package(url: "https://github.com/abdullahselek/SwiftyMessenger.git", from: "0.4.0")
XCFramework
XCFramework需要Xcode 11或更高版本,并且集成方式与框架格式类似。请使用脚本scripts/build-framework.sh生成可用的SwiftyMessenger.xcframework存档,作为Xcode中的依赖项。
SwiftyMessenger.xcframework是一个发布(优化)的二进制文件,提供了最佳可用的Swift代码性能。
使用方法
初始化
messenger = Messenger(withApplicationGroupIdentifier: "group.com.abdullahselek.swiftymessenger", directory: "messenger")
传递消息
messenger.passMessage(message: ["selectedCell": title], identifier: "selection")
读取消息
if let message = messenger.messageForIdentifier(identifier: "button") as? [String: Any] {
let buttonTitle = message["buttonTitle"] as? String
}
通过标识符监听消息更改
messenger.listenForMessage(withIdentifier: "button") { message in
guard let message = message as? [String: Any] else {
return
}
let buttonTitle = message["buttonTitle"] as? String
}
支持WatchConnectivity
SwiftyMessenger支持在watchOS扩展中由Apple提供的WatchConnectivity
API。
如果您想在您的应用程序中使用watchOS扩展的WatchConnectivity支持,请注意以下两点:
-
MessengerSession
是一个单例子类,支持监听 WatchConnectivity 消息。它可以用来监听你期望从 WatchConnectivity 框架接收到的Messenger
消息。确保在设置完监听器后激活会话,以便开始接收消息通知。 -
在创建您的信使时可以使用
MessengerSessionContextTransiting
,但它很容易因为一次性发送过多的消息而使管道过载。
传输类型
在 TransitingType 下您可以找到 5 种可用的类型。
file
(通过存档和恢复写入和读取到文件的消息进行传输的消息)coordinatedFile
(使用 FileCoordinator)sessionContext
(支持 WatchConnectivity 框架的应用程序上下文)sessionMessage
(支持 WatchConnectivity 框架的真实消息传递能力)sessionFile
(支持 WatchConnectivity 框架的文件传输能力)
许可证
SwiftyMessenger 在 MIT 许可证下发布。有关详细信息,请参阅 LICENSE。
鸣谢
灵感来自于 MutualMobile。使用新编程语言 Swift 改进并全部编写。