Skip to content

Commit e56375c

Browse files
Merge pull request #259 from juliansteenbakker/feat/darwin
imp: migrate to shared apple base
2 parents 7b438ff + 3913fd7 commit e56375c

37 files changed

+205
-735
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#
2+
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html.
3+
# Run `pod lib lint flutter_ble_peripheral.podspec' to validate before publishing.
4+
#
5+
Pod::Spec.new do |s|
6+
s.name = 'flutter_ble_peripheral'
7+
s.version = '1.3.0'
8+
s.summary = 'This plugin enables a device to be set into peripheral mode, and advertise custom
9+
services and characteristics.'
10+
s.description = <<-DESC
11+
This plugin enables a device to be set into peripheral mode, and advertise custom
12+
services and characteristics.
13+
DESC
14+
s.homepage = 'https://github.com/juliansteenbakker/flutter_ble_peripheral'
15+
s.license = { :file => '../LICENSE' }
16+
s.author = { 'Julian Steenbakker' => '[email protected]' }
17+
s.source = { :path => '.' }
18+
s.source_files = 'flutter_ble_peripheral/Sources/flutter_ble_peripheral/**/*.swift'
19+
s.ios.dependency 'Flutter'
20+
s.osx.dependency 'FlutterMacOS'
21+
s.ios.deployment_target = '13.0'
22+
s.osx.deployment_target = '10.15'
23+
24+
# Flutter.framework does not contain a i386 slice.
25+
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' }
26+
s.swift_version = '5.0'
27+
s.resource_bundles = {'flutter_ble_central_privacy' => ['flutter_ble_peripheral/Sources/flutter_ble_peripheral/Resources/PrivacyInfo.xcprivacy']}
28+
end
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// swift-tools-version: 5.9
2+
// The swift-tools-version declares the minimum version of Swift required to build this package.
3+
4+
import PackageDescription
5+
6+
let package = Package(
7+
name: "flutter_ble_peripheral",
8+
platforms: [
9+
.iOS("13.0"),
10+
.macOS("10.15")
11+
],
12+
products: [
13+
.library(name: "flutter-ble-peripheral", targets: ["flutter_ble_peripheral"])
14+
],
15+
dependencies: [],
16+
targets: [
17+
.target(
18+
name: "flutter_ble_peripheral",
19+
dependencies: [],
20+
resources: [
21+
.process("Resources"),
22+
]
23+
)
24+
]
25+
)

ios/Classes/callbacks/PeripheralManagerDelegate.swift renamed to darwin/flutter_ble_peripheral/Sources/flutter_ble_peripheral/Delegates/PeripheralManagerDelegate.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import CoreLocation
1212
extension FlutterBlePeripheralManager: CBPeripheralManagerDelegate {
1313

1414
func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) {
15-
var state: PeripheralState
15+
var state: FlutterBlePeripheralState
1616
switch peripheral.state {
1717
case .poweredOn:
1818
state = .idle

ios/Classes/FlutterBlePeripheralManager.swift renamed to darwin/flutter_ble_peripheral/Sources/flutter_ble_peripheral/FlutterBlePeripheralManager.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class FlutterBlePeripheralManager : NSObject {
4545
//
4646
// var txSubscriptions = Set<UUID>()
4747

48-
func start(advertiseData: PeripheralData) {
48+
func start(advertiseData: FlutterBlePeripheralData) {
4949
var dataToBeAdvertised: [String: Any]! = [:]
5050
if (advertiseData.uuids != nil) {
5151
dataToBeAdvertised[CBAdvertisementDataServiceUUIDsKey] = advertiseData.uuids!.map { CBUUID(string: $0) }

ios/Classes/SwiftFlutterBlePeripheralPlugin.swift renamed to darwin/flutter_ble_peripheral/Sources/flutter_ble_peripheral/FlutterBlePeripheralPlugin.swift

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,16 @@
44
* BSD-style license that can be found in the LICENSE file.
55
*/
66

7+
#if os(iOS)
78
import Flutter
89
import UIKit
10+
#else
11+
import FlutterMacOS
12+
import AppKit
13+
#endif
914
import CoreLocation
1015

11-
public class SwiftFlutterBlePeripheralPlugin: NSObject, FlutterPlugin {
16+
public class FlutterBlePeripheralPlugin: NSObject, FlutterPlugin {
1217

1318
private let flutterBlePeripheralManager: FlutterBlePeripheralManager
1419

@@ -22,10 +27,16 @@ public class SwiftFlutterBlePeripheralPlugin: NSObject, FlutterPlugin {
2227
}
2328

2429
public static func register(with registrar: FlutterPluginRegistrar) {
25-
let instance = SwiftFlutterBlePeripheralPlugin(stateChangedHandler: StateChangedHandler(registrar: registrar))
30+
let instance = FlutterBlePeripheralPlugin(stateChangedHandler: StateChangedHandler(registrar: registrar))
31+
32+
#if os(iOS)
33+
let messenger = registrar.messenger()
34+
#else
35+
let messenger = registrar.messenger
36+
#endif
2637

2738
// Method channel
28-
let methodChannel = FlutterMethodChannel(name: "dev.steenbakker.flutter_ble_peripheral/ble_state", binaryMessenger: registrar.messenger())
39+
let methodChannel = FlutterMethodChannel(name: "dev.steenbakker.flutter_ble_peripheral/ble_state", binaryMessenger: messenger)
2940
registrar.addMethodCallDelegate(instance, channel: methodChannel)
3041

3142
// Event channels
@@ -40,11 +51,11 @@ public class SwiftFlutterBlePeripheralPlugin: NSObject, FlutterPlugin {
4051
case "stop":
4152
stopPeripheral(result)
4253
case "isAdvertising":
43-
result(stateChangedHandler.state == PeripheralState.advertising)
54+
result(stateChangedHandler.state == FlutterBlePeripheralState.advertising)
4455
case "isSupported":
4556
isSupported(result)
4657
case "isConnected":
47-
result(stateChangedHandler.state == PeripheralState.connected)
58+
result(stateChangedHandler.state == FlutterBlePeripheralState.connected)
4859
case "openBluetoothSettings":
4960
openAppSettings()
5061
result(nil)
@@ -57,7 +68,7 @@ public class SwiftFlutterBlePeripheralPlugin: NSObject, FlutterPlugin {
5768

5869
private func startPeripheral(_ call: FlutterMethodCall, _ result: @escaping FlutterResult) {
5970
let map = call.arguments as? Dictionary<String, Any>
60-
let advertiseData = PeripheralData(
71+
let advertiseData = FlutterBlePeripheralData(
6172
uuid: map?["serviceUuid"] as? String ,
6273
localName: map?["localName"] as? String,
6374
uuids: map?["serviceUuids"] as? [String] ,
@@ -68,7 +79,7 @@ public class SwiftFlutterBlePeripheralPlugin: NSObject, FlutterPlugin {
6879

6980
private func stopPeripheral(_ result: @escaping FlutterResult) {
7081
flutterBlePeripheralManager.peripheralManager.stopAdvertising()
71-
stateChangedHandler.publishPeripheralState(state: PeripheralState.idle)
82+
stateChangedHandler.publishPeripheralState(state: FlutterBlePeripheralState.idle)
7283
result(nil)
7384
}
7485

@@ -82,11 +93,13 @@ public class SwiftFlutterBlePeripheralPlugin: NSObject, FlutterPlugin {
8293
}
8394

8495
private func openAppSettings() {
85-
if let url = URL(string: UIApplication.openSettingsURLString) {
86-
if UIApplication.shared.canOpenURL(url) {
87-
UIApplication.shared.open(url, options: [:], completionHandler: nil)
96+
#if os(iOS)
97+
if let settingsUrl = URL(string: UIApplication.openSettingsURLString) {
98+
UIApplication.shared.open(settingsUrl)
8899
}
89-
}
100+
#else
101+
NSWorkspace.shared.open(URL(fileURLWithPath: "/System/Applications/System Settings.app"))
102+
#endif
90103
}
91104

92105
// private func sendData(_ call: FlutterMethodCall,

ios/Classes/handlers/StateChangedHandler.swift renamed to darwin/flutter_ble_peripheral/Sources/flutter_ble_peripheral/Handlers/StateChangedHandler.swift

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,33 @@
66
//
77

88
import Foundation
9+
#if os(iOS)
10+
import Flutter
11+
#else
12+
import FlutterMacOS
13+
#endif
914

1015
public class StateChangedHandler: NSObject, FlutterStreamHandler {
1116

1217
private var eventSink: FlutterEventSink?
1318

14-
var state: PeripheralState = PeripheralState.idle
19+
var state: FlutterBlePeripheralState = FlutterBlePeripheralState.idle
1520

1621
private let eventChannel: FlutterEventChannel
1722

1823
init(registrar: FlutterPluginRegistrar) {
24+
#if os(iOS)
25+
let messenger = registrar.messenger()
26+
#else
27+
let messenger = registrar.messenger
28+
#endif
1929
eventChannel = FlutterEventChannel(name: "dev.steenbakker.flutter_ble_peripheral/ble_state_changed",
20-
binaryMessenger: registrar.messenger())
30+
binaryMessenger: messenger)
2131
super.init()
2232
eventChannel.setStreamHandler(self)
2333
}
2434

25-
func publishPeripheralState(state: PeripheralState) {
35+
func publishPeripheralState(state: FlutterBlePeripheralState) {
2636
self.state = state
2737
if let eventSink = self.eventSink {
2838
eventSink(state.rawValue)

ios/Classes/Models/PeripheralData.swift renamed to darwin/flutter_ble_peripheral/Sources/flutter_ble_peripheral/Models/FlutterBlePeripheralData.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import Foundation
99

10-
class PeripheralData {
10+
class FlutterBlePeripheralData {
1111
var uuid: String?
1212
var uuids: [String]?
1313
var localName: String? //CBAdvertisementDataLocalNameKey

ios/Classes/Models/PeripheralState.swift renamed to darwin/flutter_ble_peripheral/Sources/flutter_ble_peripheral/Models/FlutterBlePeripheralState.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import Foundation
99

10-
enum PeripheralState : Int{
10+
enum FlutterBlePeripheralState : Int{
1111
// case idle, unauthorized, unsupported, advertising, connected
1212
/// Status is not (yet) determined.
1313
case unknown

0 commit comments

Comments
 (0)