Skip to content

Commit 4770863

Browse files
authored
Merge pull request #20 from banjun/swift6
Migrate to Swift 6
2 parents e38e757 + c1fb536 commit 4770863

File tree

18 files changed

+155
-95
lines changed

18 files changed

+155
-95
lines changed

.github/workflows/main.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ jobs:
1515
steps:
1616
- uses: maxim-lobanov/setup-xcode@v1
1717
with:
18-
xcode-version: '^15.2.0'
18+
xcode-version: '^16.0.0'
1919
- uses: actions/checkout@v4
20-
- run: swift build -c ${{ matrix.configuration }} -Xswiftc -enable-testing
20+
- run: swift build -c ${{ matrix.configuration }} -Xswiftc -enable-testing -Xswiftc -swift-version -Xswiftc 6
2121
podspec:
2222
strategy:
2323
matrix:
@@ -27,7 +27,7 @@ jobs:
2727
steps:
2828
- uses: maxim-lobanov/setup-xcode@v1
2929
with:
30-
xcode-version: '^15.2.0'
30+
xcode-version: '^16.0.0'
3131
- uses: actions/checkout@v4
3232
- run: bundle install
3333
- run: bundle exec pod lib lint --platforms=${{ matrix.platform }} --configuration=${{ matrix.configuration }}

BuildHelper/BuildHelper.xcodeproj/project.pbxproj

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@
133133
attributes = {
134134
BuildIndependentTargetsInParallel = 1;
135135
LastSwiftUpdateCheck = 1500;
136-
LastUpgradeCheck = 1500;
136+
LastUpgradeCheck = 1600;
137137
TargetAttributes = {
138138
63A746952AFDD742003FA3AC = {
139139
CreatedOnToolsVersion = 15.0.1;
@@ -219,6 +219,7 @@
219219
CLANG_WARN_UNREACHABLE_CODE = YES;
220220
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
221221
COPY_PHASE_STRIP = NO;
222+
DEAD_CODE_STRIPPING = YES;
222223
DEBUG_INFORMATION_FORMAT = dwarf;
223224
ENABLE_STRICT_OBJC_MSGSEND = YES;
224225
ENABLE_TESTABILITY = YES;
@@ -282,6 +283,7 @@
282283
CLANG_WARN_UNREACHABLE_CODE = YES;
283284
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
284285
COPY_PHASE_STRIP = NO;
286+
DEAD_CODE_STRIPPING = YES;
285287
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
286288
ENABLE_NS_ASSERTIONS = NO;
287289
ENABLE_STRICT_OBJC_MSGSEND = YES;
@@ -312,6 +314,7 @@
312314
CODE_SIGN_STYLE = Automatic;
313315
COMBINE_HIDPI_IMAGES = YES;
314316
CURRENT_PROJECT_VERSION = 1;
317+
DEAD_CODE_STRIPPING = YES;
315318
DEVELOPMENT_ASSET_PATHS = "\"Preview Content\"";
316319
ENABLE_PREVIEWS = YES;
317320
GENERATE_INFOPLIST_FILE = YES;
@@ -326,7 +329,7 @@
326329
PRODUCT_BUNDLE_IDENTIFIER = jp.banjun.SwiftHotReload.BuildHelper;
327330
PRODUCT_NAME = "$(TARGET_NAME)";
328331
SWIFT_EMIT_LOC_STRINGS = YES;
329-
SWIFT_VERSION = 5.0;
332+
SWIFT_VERSION = 6.0;
330333
};
331334
name = Debug;
332335
};
@@ -339,6 +342,7 @@
339342
CODE_SIGN_STYLE = Automatic;
340343
COMBINE_HIDPI_IMAGES = YES;
341344
CURRENT_PROJECT_VERSION = 1;
345+
DEAD_CODE_STRIPPING = YES;
342346
DEVELOPMENT_ASSET_PATHS = "\"Preview Content\"";
343347
ENABLE_PREVIEWS = YES;
344348
GENERATE_INFOPLIST_FILE = YES;
@@ -353,7 +357,7 @@
353357
PRODUCT_BUNDLE_IDENTIFIER = jp.banjun.SwiftHotReload.BuildHelper;
354358
PRODUCT_NAME = "$(TARGET_NAME)";
355359
SWIFT_EMIT_LOC_STRINGS = YES;
356-
SWIFT_VERSION = 5.0;
360+
SWIFT_VERSION = 6.0;
357361
};
358362
name = Release;
359363
};

BuildHelper/Sources/BuildHelper.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
// Release build is not disabled as BuildHelper.app is to be buildable for generating a mac helper app.
55
// TODO: BuildHelper may be separated into sub- spec/package
66
import Foundation
7-
import Combine
7+
@preconcurrency import Combine
88

9+
@MainActor
910
public final class BuildHelper: ObservableObject {
1011
let proxyBrowser = ProxyBrowser()
1112

@@ -17,7 +18,7 @@ public final class BuildHelper: ObservableObject {
1718
private var fileMonitor: FileMonitor? {
1819
didSet {
1920
Task {
20-
fileMonitorCancellable = await fileMonitor?.$fileChanges.compactMap {$0}.sink { [weak self] _ in
21+
fileMonitorCancellable = await fileMonitor?.fileChanges.compactMap {$0}.sink { [weak self] _ in
2122
self?.reload()
2223
}
2324
}

BuildHelper/Sources/BuildHelperApp.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ struct BuildHelperApp: SwiftUI.App {
2929

3030
struct ContentView: View {
3131
@EnvironmentObject var buildHelper: BuildHelper
32+
@State private var browserView: MCBrowserViewControllerView?
3233

3334
var body: some View {
3435
VStack(spacing: 20) {
@@ -38,7 +39,9 @@ struct BuildHelperApp: SwiftUI.App {
3839
Text("Date Reloaded" + "\n" + (buildHelper.dateReloaded?.formatted(date: .numeric, time: .complete) ?? "Never"))
3940
.multilineTextAlignment(.center)
4041

41-
buildHelper.proxyBrowser.browserView
42+
if let browserView { browserView } else { ProgressView().task {
43+
browserView = await buildHelper.proxyBrowser.browserView()
44+
}}
4245
}
4346
.padding()
4447
}

BuildHelper/Sources/ProxyBrowser.swift

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,26 @@
33
// Release build is not disabled as BuildHelper.app is to be buildable for generating a mac helper app.
44
// TODO: BuildHelper may be separated into sub- spec/package
55
import Foundation
6-
import MultipeerConnectivity
6+
@preconcurrency import MultipeerConnectivity
77
@testable import SwiftHotReload // NOTE: use internal methods. SPM does not allow overlapping sources for a single Package.swift
8+
import SwiftUI
89

910
final actor ProxyBrowser {
1011
@Published private(set) var runtimePeers: [RuntimePeer] = []
1112
private let peerID: MCPeerID
1213
private let session: MCSession
1314
private let browser: MCNearbyServiceBrowser
1415
private let sessionDelegate: SessionDelegate = .init()
15-
let browserView: MCBrowserViewControllerView
16+
private(set) var browserView: @Sendable () async -> MCBrowserViewControllerView
1617

17-
init(hostName: String = ProcessInfo().hostName, bundleID: String? = Env.shared.CFBundleIdentifier, processID: Int32 = ProcessInfo().processIdentifier) {
18+
init(hostName: String = ProcessInfo().hostName, bundleID: String? = Env.host.CFBundleIdentifier, processID: Int32 = ProcessInfo().processIdentifier) {
1819
let displayName = String("Client[\(hostName)] \(bundleID ?? "cli")(\(processID))".utf8.prefix(63))!
1920
self.peerID = MCPeerID(displayName: displayName)
20-
self.session = MCSession(peer: peerID, securityIdentity: nil, encryptionPreference: .required)
21-
self.browser = MCNearbyServiceBrowser(peer: peerID, serviceType: MultipeerConnectivityConstants.serviceType)
22-
self.browserView = MCBrowserViewControllerView(browser: browser, session: session)
21+
let session = MCSession(peer: peerID, securityIdentity: nil, encryptionPreference: .required)
22+
self.session = session
23+
let browser = MCNearbyServiceBrowser(peer: peerID, serviceType: MultipeerConnectivityConstants.serviceType)
24+
self.browser = browser
25+
self.browserView = { await MCBrowserViewControllerView(browser: browser, session: session) }
2326

2427
// Task {
2528
session.delegate = sessionDelegate
@@ -69,16 +72,16 @@ final actor ProxyBrowser {
6972
}
7073

7174
private extension ProxyBrowser {
72-
private final class SessionDelegate: NSObject, MCSessionDelegate {
73-
unowned var owner: ProxyBrowser?
75+
private final class SessionDelegate: NSObject, MCSessionDelegate, Sendable {
76+
unowned nonisolated(unsafe) var owner: ProxyBrowser?
7477
override init() { super.init() }
7578

7679
func session(_ session: MCSession, peer peerID: MCPeerID, didChange state: MCSessionState) {
77-
Task { await owner?.session(session, peer: peerID, didChange: state) }
80+
Task { @Sendable in await self.owner?.session(session, peer: peerID, didChange: state) }
7881
}
7982

8083
func session(_ session: MCSession, didReceive data: Data, fromPeer peerID: MCPeerID) {
81-
Task { await owner?.session(session, didReceive: data, fromPeer: peerID) }
84+
Task { @Sendable in await self.owner?.session(session, didReceive: data, fromPeer: peerID) }
8285
}
8386

8487
func session(_ session: MCSession, didReceive stream: InputStream, withName streamName: String, fromPeer peerID: MCPeerID) {

Example/SwiftHotReloadExample.xcodeproj/project.pbxproj

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@
123123
attributes = {
124124
BuildIndependentTargetsInParallel = 1;
125125
LastSwiftUpdateCheck = 1500;
126-
LastUpgradeCheck = 1500;
126+
LastUpgradeCheck = 1600;
127127
TargetAttributes = {
128128
63980F422AEA8DA50099B122 = {
129129
CreatedOnToolsVersion = 15.0.1;
@@ -209,6 +209,7 @@
209209
CLANG_WARN_UNREACHABLE_CODE = YES;
210210
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
211211
COPY_PHASE_STRIP = NO;
212+
DEAD_CODE_STRIPPING = YES;
212213
DEBUG_INFORMATION_FORMAT = dwarf;
213214
ENABLE_STRICT_OBJC_MSGSEND = YES;
214215
ENABLE_TESTABILITY = YES;
@@ -270,6 +271,7 @@
270271
CLANG_WARN_UNREACHABLE_CODE = YES;
271272
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
272273
COPY_PHASE_STRIP = NO;
274+
DEAD_CODE_STRIPPING = YES;
273275
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
274276
ENABLE_NS_ASSERTIONS = NO;
275277
ENABLE_STRICT_OBJC_MSGSEND = YES;
@@ -297,6 +299,7 @@
297299
CODE_SIGN_ENTITLEMENTS = SwiftHotReloadExample.entitlements;
298300
CODE_SIGN_STYLE = Automatic;
299301
CURRENT_PROJECT_VERSION = 1;
302+
DEAD_CODE_STRIPPING = YES;
300303
DEVELOPMENT_ASSET_PATHS = "\"Preview Content\"";
301304
DEVELOPMENT_TEAM = "";
302305
ENABLE_PREVIEWS = YES;
@@ -325,7 +328,7 @@
325328
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator";
326329
SUPPORTS_MACCATALYST = NO;
327330
SWIFT_EMIT_LOC_STRINGS = YES;
328-
SWIFT_VERSION = 5.0;
331+
SWIFT_VERSION = 6.0;
329332
TARGETED_DEVICE_FAMILY = "1,2,7";
330333
};
331334
name = Debug;
@@ -338,6 +341,7 @@
338341
CODE_SIGN_ENTITLEMENTS = SwiftHotReloadExample.entitlements;
339342
CODE_SIGN_STYLE = Automatic;
340343
CURRENT_PROJECT_VERSION = 1;
344+
DEAD_CODE_STRIPPING = YES;
341345
DEVELOPMENT_ASSET_PATHS = "\"Preview Content\"";
342346
DEVELOPMENT_TEAM = "";
343347
ENABLE_PREVIEWS = YES;
@@ -366,7 +370,7 @@
366370
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator";
367371
SUPPORTS_MACCATALYST = NO;
368372
SWIFT_EMIT_LOC_STRINGS = YES;
369-
SWIFT_VERSION = 5.0;
373+
SWIFT_VERSION = 6.0;
370374
TARGETED_DEVICE_FAMILY = "1,2,7";
371375
};
372376
name = Release;

Example/SwiftHotReloadExample.xcodeproj/xcshareddata/xcschemes/SwiftHotReloadExample.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1500"
3+
LastUpgradeVersion = "1600"
44
version = "1.7">
55
<BuildAction
66
parallelizeBuildables = "YES"

FrameworkTarget/SwiftHotReload.xcodeproj/project.pbxproj

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@
160160
attributes = {
161161
BuildIndependentTargetsInParallel = 1;
162162
LastSwiftUpdateCheck = 1500;
163-
LastUpgradeCheck = 1500;
163+
LastUpgradeCheck = 1600;
164164
TargetAttributes = {
165165
63980F702AEA93310099B122 = {
166166
CreatedOnToolsVersion = 15.0.1;
@@ -254,6 +254,7 @@
254254
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
255255
COPY_PHASE_STRIP = NO;
256256
CURRENT_PROJECT_VERSION = 1;
257+
DEAD_CODE_STRIPPING = YES;
257258
DEBUG_INFORMATION_FORMAT = dwarf;
258259
ENABLE_STRICT_OBJC_MSGSEND = YES;
259260
ENABLE_TESTABILITY = YES;
@@ -318,6 +319,7 @@
318319
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
319320
COPY_PHASE_STRIP = NO;
320321
CURRENT_PROJECT_VERSION = 1;
322+
DEAD_CODE_STRIPPING = YES;
321323
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
322324
ENABLE_NS_ASSERTIONS = NO;
323325
ENABLE_STRICT_OBJC_MSGSEND = YES;
@@ -345,6 +347,7 @@
345347
CLANG_ENABLE_MODULES = YES;
346348
CODE_SIGN_STYLE = Automatic;
347349
CURRENT_PROJECT_VERSION = 1;
350+
DEAD_CODE_STRIPPING = YES;
348351
DEFINES_MODULE = YES;
349352
DYLIB_COMPATIBILITY_VERSION = 1;
350353
DYLIB_CURRENT_VERSION = 1;
@@ -375,7 +378,7 @@
375378
SUPPORTS_MACCATALYST = NO;
376379
SWIFT_EMIT_LOC_STRINGS = YES;
377380
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
378-
SWIFT_VERSION = 5.0;
381+
SWIFT_VERSION = 6.0;
379382
TARGETED_DEVICE_FAMILY = "1,2,7";
380383
};
381384
name = Debug;
@@ -386,6 +389,7 @@
386389
CLANG_ENABLE_MODULES = YES;
387390
CODE_SIGN_STYLE = Automatic;
388391
CURRENT_PROJECT_VERSION = 1;
392+
DEAD_CODE_STRIPPING = YES;
389393
DEFINES_MODULE = YES;
390394
DYLIB_COMPATIBILITY_VERSION = 1;
391395
DYLIB_CURRENT_VERSION = 1;
@@ -414,7 +418,7 @@
414418
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator";
415419
SUPPORTS_MACCATALYST = NO;
416420
SWIFT_EMIT_LOC_STRINGS = YES;
417-
SWIFT_VERSION = 5.0;
421+
SWIFT_VERSION = 6.0;
418422
TARGETED_DEVICE_FAMILY = "1,2,7";
419423
};
420424
name = Release;

0 commit comments

Comments
 (0)