Skip to content

Commit f5b99fe

Browse files
authored
Remove SPM (🎉) and upgrade deps (home-assistant#1242)
Words cannot describe how bad SPM is. For the future record, here are the big reasons: - Xcode fails to find Swift Package Manager Binary Target dependency… FB8743041 This manifests as "cannot find module Clibsodium" or "Realm" or whatever. - Xcode Swift Package Manager checkout retry has 0-second delay FB8742078 Xcode's built-in version of git/curl has bugs with pipelining, forcing us to replace it with another version to get ci to be more reliable. - xcframework via Swift Package Manager both statically links to library and embeds it FB8721223 This requires us massaging the output build products because Xcode produces invalid binaries, which fail all the validation Apple does on App Store Connect upload and on Developer ID Notarization. ----- In total, this means using SPM produces invalid builds, often fails to build correctly, and often fails to check out dependencies correctly. What a let-down.
1 parent 9107c86 commit f5b99fe

File tree

10 files changed

+47
-177
lines changed

10 files changed

+47
-177
lines changed

‎.github/workflows/ci.yml

+1-30
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,6 @@ jobs:
2727
env:
2828
DEVELOPER_DIR: /Applications/Xcode_12.2.app/Contents/Developer
2929
steps:
30-
- name: "Xcode 12 CoreNFC Workaround"
31-
# FB8697856 - works around Xcode 12 unable to link with CoreNFC in simulator
32-
run: |
33-
pushd /tmp
34-
curl -LO https://github.com/home-assistant/iOS/files/5285110/libnfshared.dylib.zip
35-
unzip libnfshared.dylib.zip
36-
cp -f libnfshared.dylib /Applications/Xcode_12.2.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/libnfshared.dylib
37-
cp -f libnfshared.dylib /Applications/Xcode_12.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/libnfshared.dylib
38-
39-
- name: "Xcode 12 Git Workaround"
40-
# FB8742330 - works around Xcode 12's built-in git having issues cloning without getting curl errors
41-
run: |
42-
ln -sf $(which git) /Applications/Xcode_12.2.app/Contents/Developer/usr/bin/git
43-
4430
- uses: actions/checkout@v2
4531

4632
- uses: actions/cache@v2
@@ -69,19 +55,6 @@ jobs:
6955
restore-keys: |
7056
${{ runner.os }}-spm-
7157
72-
- uses: actions/cache@v2
73-
name: "Cache: Expensive Dependencies"
74-
with:
75-
path: |
76-
~/Library/Developer/Xcode/DerivedData/HomeAssistant-*/Build/Intermediates.noindex/Realm*
77-
~/Library/Developer/Xcode/DerivedData/HomeAssistant-*/Build/Intermediates.noindex/Sodium*
78-
~/Library/Developer/Xcode/DerivedData/HomeAssistant-*/Build/Products/Debug-*/Realm*
79-
~/Library/Developer/Xcode/DerivedData/HomeAssistant-*/Build/Products/Debug-*/Firebase*
80-
~/Library/Developer/Xcode/DerivedData/HomeAssistant-*/Build/Products/Debug-*/Sodium*
81-
key: ${{ runner.os }}-expensive-dependencies-${{ hashFiles('**/Podfile.lock', 'HomeAssistant.xcworkspace/xcshareddata/swiftpm/Package.resolved') }}
82-
restore-keys: |
83-
${{ runner.os }}-expensive-dependencies-
84-
8558
- name: Install Gems
8659
run: |
8760
bundle config path vendor/bundle
@@ -91,9 +64,7 @@ jobs:
9164
run: diff Pods/Manifest.lock Podfile.lock >/dev/null || bundle exec pod install --repo-update
9265

9366
- name: Run tests
94-
# retry in case a build failure happens. at the time of writing, Clibsodium via SPM will occasionally fail on first build
95-
# because it cannot find the Clibsodium xcframework due to some internal-to-Xcode race condition
96-
run: bundle exec fastlane ios test || bundle exec fastlane ios test
67+
run: bundle exec fastlane ios test
9768

9869
- uses: actions/upload-artifact@v2
9970
name: "Upload Test Logs"

‎HomeAssistant.xcodeproj/project.pbxproj

-94
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,6 @@
4747
111858DA24CB7F9900B8CDDC /* SiriIntents+ConvenienceInits.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6A5D9F4215233EC0013963F /* SiriIntents+ConvenienceInits.swift */; };
4848
111858DB24CB7F9900B8CDDC /* SiriIntents+ConvenienceInits.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6A5D9F4215233EC0013963F /* SiriIntents+ConvenienceInits.swift */; };
4949
111858DF24CB83DF00B8CDDC /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = B63CCDCF2164714900123C50 /* Intents.intentdefinition */; settings = {ATTRIBUTES = (no_codegen, ); }; };
50-
111D294224F2F6AE00C8A7D1 /* Realm in Frameworks */ = {isa = PBXBuildFile; productRef = 111D294124F2F6AE00C8A7D1 /* Realm */; };
51-
111D294424F2F6AE00C8A7D1 /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 111D294324F2F6AE00C8A7D1 /* RealmSwift */; };
52-
111D294624F2F6B600C8A7D1 /* Realm in Frameworks */ = {isa = PBXBuildFile; productRef = 111D294524F2F6B600C8A7D1 /* Realm */; };
53-
111D294824F2F6B600C8A7D1 /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 111D294724F2F6B600C8A7D1 /* RealmSwift */; };
5450
111D295624F30E2400C8A7D1 /* Updater.swift in Sources */ = {isa = PBXBuildFile; fileRef = 111D295424F30D2C00C8A7D1 /* Updater.swift */; };
5551
111D295724F30E2500C8A7D1 /* Updater.swift in Sources */ = {isa = PBXBuildFile; fileRef = 111D295424F30D2C00C8A7D1 /* Updater.swift */; };
5652
112B705B2526B1C500FEAA76 /* UpdateSensors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 112B705A2526B1C500FEAA76 /* UpdateSensors.swift */; };
@@ -71,8 +67,6 @@
7167
1141182724AF9A0500E6525C /* WebhookManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1141182524AF9A0500E6525C /* WebhookManager.swift */; };
7268
1141182A24AFA10900E6525C /* WebhookResponseHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1141182924AFA10900E6525C /* WebhookResponseHandler.swift */; };
7369
1141182B24AFA10900E6525C /* WebhookResponseHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1141182924AFA10900E6525C /* WebhookResponseHandler.swift */; };
74-
1147C6D325181200002BEB20 /* Clibsodium in Frameworks */ = {isa = PBXBuildFile; productRef = 1147C6D225181200002BEB20 /* Clibsodium */; };
75-
1147C6D525181208002BEB20 /* Clibsodium in Frameworks */ = {isa = PBXBuildFile; productRef = 1147C6D425181208002BEB20 /* Clibsodium */; };
7670
11482AD62505CB6E00C48C58 /* HACoreAudioObjectDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11482AD52505CB6E00C48C58 /* HACoreAudioObjectDevice.swift */; };
7771
11482AD72505CB6E00C48C58 /* HACoreAudioObjectDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11482AD52505CB6E00C48C58 /* HACoreAudioObjectDevice.swift */; };
7872
1148A44E24E8B59100345050 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1171506A24DFCDE60065E874 /* WidgetKit.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
@@ -138,8 +132,6 @@
138132
11883CC724C131EE0036A6C6 /* RealmZone.test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11883CC624C131EE0036A6C6 /* RealmZone.test.swift */; };
139133
118F046924CB895A00CBBD5C /* UIColor+CSS3+Hex.swift in Sources */ = {isa = PBXBuildFile; fileRef = B68FF7691F9D8637002BAADA /* UIColor+CSS3+Hex.swift */; };
140134
118F046A24CB895B00CBBD5C /* UIColor+CSS3+Hex.swift in Sources */ = {isa = PBXBuildFile; fileRef = B68FF7691F9D8637002BAADA /* UIColor+CSS3+Hex.swift */; };
141-
118F8733251806BD001E1AD7 /* Sodium in Frameworks */ = {isa = PBXBuildFile; productRef = 118F8732251806BD001E1AD7 /* Sodium */; };
142-
118F8737251806CA001E1AD7 /* Sodium in Frameworks */ = {isa = PBXBuildFile; productRef = 118F8736251806CA001E1AD7 /* Sodium */; };
143135
119385A4249E8E360097F497 /* StorageSensor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 119385A3249E8E360097F497 /* StorageSensor.swift */; };
144136
119385A5249E8E360097F497 /* StorageSensor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 119385A3249E8E360097F497 /* StorageSensor.swift */; };
145137
119385A7249E9F930097F497 /* StorageSensor.test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 119385A6249E9F930097F497 /* StorageSensor.test.swift */; };
@@ -1700,10 +1692,6 @@
17001692
isa = PBXFrameworksBuildPhase;
17011693
buildActionMask = 2147483647;
17021694
files = (
1703-
118F8737251806CA001E1AD7 /* Sodium in Frameworks */,
1704-
111D294824F2F6B600C8A7D1 /* RealmSwift in Frameworks */,
1705-
1147C6D525181208002BEB20 /* Clibsodium in Frameworks */,
1706-
111D294624F2F6B600C8A7D1 /* Realm in Frameworks */,
17071695
CF58E969432B36CC112701AC /* Pods_watchOS_Shared_watchOS.framework in Frameworks */,
17081696
);
17091697
runOnlyForDeploymentPostprocessing = 0;
@@ -1733,10 +1721,6 @@
17331721
1182620A24F9D2EE000795C6 /* CoreMediaIO.framework in Frameworks */,
17341722
D0EEF301214D8EAB00D1D360 /* CoreLocation.framework in Frameworks */,
17351723
D0B25BD7213312AE00678C2C /* UserNotifications.framework in Frameworks */,
1736-
111D294224F2F6AE00C8A7D1 /* Realm in Frameworks */,
1737-
111D294424F2F6AE00C8A7D1 /* RealmSwift in Frameworks */,
1738-
1147C6D325181200002BEB20 /* Clibsodium in Frameworks */,
1739-
118F8733251806BD001E1AD7 /* Sodium in Frameworks */,
17401724
539AA1653F4BCDB61FE7C696 /* Pods_iOS_Shared_iOS.framework in Frameworks */,
17411725
);
17421726
runOnlyForDeploymentPostprocessing = 0;
@@ -3242,12 +3226,6 @@
32423226
dependencies = (
32433227
);
32443228
name = "Shared-watchOS";
3245-
packageProductDependencies = (
3246-
111D294524F2F6B600C8A7D1 /* Realm */,
3247-
111D294724F2F6B600C8A7D1 /* RealmSwift */,
3248-
118F8736251806CA001E1AD7 /* Sodium */,
3249-
1147C6D425181208002BEB20 /* Clibsodium */,
3250-
);
32513229
productName = "Shared-watchOS";
32523230
productReference = B67CE82422200D420034C1D0 /* Shared.framework */;
32533231
productType = "com.apple.product-type.framework";
@@ -3326,12 +3304,6 @@
33263304
11A31C93252128B900D50A78 /* PBXTargetDependency */,
33273305
);
33283306
name = "Shared-iOS";
3329-
packageProductDependencies = (
3330-
111D294124F2F6AE00C8A7D1 /* Realm */,
3331-
111D294324F2F6AE00C8A7D1 /* RealmSwift */,
3332-
118F8732251806BD001E1AD7 /* Sodium */,
3333-
1147C6D225181200002BEB20 /* Clibsodium */,
3334-
);
33353307
productName = Shared;
33363308
productReference = D03D891720E0A85200D4F28D /* Shared.framework */;
33373309
productType = "com.apple.product-type.framework";
@@ -3570,10 +3542,6 @@
35703542
el,
35713543
);
35723544
mainGroup = B657A8DD1CA646EB00121384;
3573-
packageReferences = (
3574-
111D294024F2F6AE00C8A7D1 /* XCRemoteSwiftPackageReference "realm-cocoa" */,
3575-
118F872F251806BD001E1AD7 /* XCRemoteSwiftPackageReference "swift-sodium" */,
3576-
);
35773545
productRefGroup = B657A8E71CA646EB00121384 /* Products */;
35783546
projectDirPath = "";
35793547
projectRoot = "";
@@ -6263,68 +6231,6 @@
62636231
defaultConfigurationName = Release;
62646232
};
62656233
/* End XCConfigurationList section */
6266-
6267-
/* Begin XCRemoteSwiftPackageReference section */
6268-
111D294024F2F6AE00C8A7D1 /* XCRemoteSwiftPackageReference "realm-cocoa" */ = {
6269-
isa = XCRemoteSwiftPackageReference;
6270-
repositoryURL = "https://github.com/realm/realm-cocoa";
6271-
requirement = {
6272-
kind = upToNextMajorVersion;
6273-
minimumVersion = 5.3.5;
6274-
};
6275-
};
6276-
118F872F251806BD001E1AD7 /* XCRemoteSwiftPackageReference "swift-sodium" */ = {
6277-
isa = XCRemoteSwiftPackageReference;
6278-
repositoryURL = "https://github.com/jedisct1/swift-sodium";
6279-
requirement = {
6280-
branch = master;
6281-
kind = branch;
6282-
};
6283-
};
6284-
/* End XCRemoteSwiftPackageReference section */
6285-
6286-
/* Begin XCSwiftPackageProductDependency section */
6287-
111D294124F2F6AE00C8A7D1 /* Realm */ = {
6288-
isa = XCSwiftPackageProductDependency;
6289-
package = 111D294024F2F6AE00C8A7D1 /* XCRemoteSwiftPackageReference "realm-cocoa" */;
6290-
productName = Realm;
6291-
};
6292-
111D294324F2F6AE00C8A7D1 /* RealmSwift */ = {
6293-
isa = XCSwiftPackageProductDependency;
6294-
package = 111D294024F2F6AE00C8A7D1 /* XCRemoteSwiftPackageReference "realm-cocoa" */;
6295-
productName = RealmSwift;
6296-
};
6297-
111D294524F2F6B600C8A7D1 /* Realm */ = {
6298-
isa = XCSwiftPackageProductDependency;
6299-
package = 111D294024F2F6AE00C8A7D1 /* XCRemoteSwiftPackageReference "realm-cocoa" */;
6300-
productName = Realm;
6301-
};
6302-
111D294724F2F6B600C8A7D1 /* RealmSwift */ = {
6303-
isa = XCSwiftPackageProductDependency;
6304-
package = 111D294024F2F6AE00C8A7D1 /* XCRemoteSwiftPackageReference "realm-cocoa" */;
6305-
productName = RealmSwift;
6306-
};
6307-
1147C6D225181200002BEB20 /* Clibsodium */ = {
6308-
isa = XCSwiftPackageProductDependency;
6309-
package = 118F872F251806BD001E1AD7 /* XCRemoteSwiftPackageReference "swift-sodium" */;
6310-
productName = Clibsodium;
6311-
};
6312-
1147C6D425181208002BEB20 /* Clibsodium */ = {
6313-
isa = XCSwiftPackageProductDependency;
6314-
package = 118F872F251806BD001E1AD7 /* XCRemoteSwiftPackageReference "swift-sodium" */;
6315-
productName = Clibsodium;
6316-
};
6317-
118F8732251806BD001E1AD7 /* Sodium */ = {
6318-
isa = XCSwiftPackageProductDependency;
6319-
package = 118F872F251806BD001E1AD7 /* XCRemoteSwiftPackageReference "swift-sodium" */;
6320-
productName = Sodium;
6321-
};
6322-
118F8736251806CA001E1AD7 /* Sodium */ = {
6323-
isa = XCSwiftPackageProductDependency;
6324-
package = 118F872F251806BD001E1AD7 /* XCRemoteSwiftPackageReference "swift-sodium" */;
6325-
productName = Sodium;
6326-
};
6327-
/* End XCSwiftPackageProductDependency section */
63286234
};
63296235
rootObject = B657A8DE1CA646EB00121384 /* Project object */;
63306236
}

‎HomeAssistant.xcworkspace/xcshareddata/swiftpm/Package.resolved

-34
This file was deleted.

‎Podfile

+11-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ pod 'Communicator', '~> 3.3.0'
1111
pod 'KeychainAccess'
1212
pod 'ObjectMapper', :git => 'https://github.com/tristanhimmelman/ObjectMapper.git', :branch => 'master'
1313
pod 'PromiseKit'
14+
pod 'RealmSwift'
1415
pod 'Sentry'
1516
pod 'UIColor_Hex_Swift'
1617
pod 'Version'
@@ -27,13 +28,19 @@ def test_pods
2728
pod 'OHHTTPStubs/Swift'
2829
end
2930

31+
def shared_fwk_pods
32+
pod 'Sodium', :git => 'https://github.com/jedisct1/swift-sodium.git', :branch => 'master'
33+
end
34+
3035
abstract_target 'iOS' do
31-
platform :ios, '11.0'
36+
platform :ios, '12.0'
3237

3338
pod 'MBProgressHUD', '~> 1.2.0'
3439
pod 'ReachabilitySwift'
3540

3641
target 'Shared-iOS' do
42+
shared_fwk_pods
43+
3744
target 'Tests-Shared' do
3845
inherit! :complete
3946
test_pods
@@ -72,7 +79,9 @@ end
7279
abstract_target 'watchOS' do
7380
platform :watchos, '5.0'
7481

75-
target 'Shared-watchOS'
82+
target 'Shared-watchOS' do
83+
shared_fwk_pods
84+
end
7685

7786
target 'WatchExtension-Watch' do
7887
pod 'EMTLoadingIndicator', :git => 'https://github.com/hirokimu/EMTLoadingIndicator', :branch => 'master'

‎Podfile.lock

+20-1
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,16 @@ PODS:
100100
- PromisesObjC (1.2.11)
101101
- Protobuf (3.13.0)
102102
- ReachabilitySwift (5.0.0)
103+
- Realm (10.1.0):
104+
- Realm/Headers (= 10.1.0)
105+
- Realm/Headers (10.1.0)
106+
- RealmSwift (10.1.0):
107+
- Realm (= 10.1.0)
103108
- Sentry (6.0.4):
104109
- Sentry/Core (= 6.0.4)
105110
- Sentry/Core (6.0.4)
106111
- SimulatorStatusMagic (2.4.1)
112+
- Sodium (0.9.0)
107113
- SwiftGen (6.4.0)
108114
- SwiftLint (0.40.3)
109115
- SwiftMessages (8.0.2):
@@ -137,8 +143,10 @@ DEPENDENCIES:
137143
- OHHTTPStubs/Swift
138144
- PromiseKit
139145
- ReachabilitySwift
146+
- RealmSwift
140147
- Sentry
141148
- SimulatorStatusMagic
149+
- Sodium (from `https://github.com/jedisct1/swift-sodium.git`, branch `master`)
142150
- SwiftGen (~> 6.4.0)
143151
- SwiftLint
144152
- SwiftMessages
@@ -173,6 +181,8 @@ SPEC REPOS:
173181
- PromisesObjC
174182
- Protobuf
175183
- ReachabilitySwift
184+
- Realm
185+
- RealmSwift
176186
- Sentry
177187
- SimulatorStatusMagic
178188
- SwiftGen
@@ -197,6 +207,9 @@ EXTERNAL SOURCES:
197207
ObjectMapper:
198208
:branch: master
199209
:git: https://github.com/tristanhimmelman/ObjectMapper.git
210+
Sodium:
211+
:branch: master
212+
:git: https://github.com/jedisct1/swift-sodium.git
200213
ViewRow:
201214
:branch: master
202215
:git: https://github.com/EurekaCommunity/ViewRow
@@ -214,6 +227,9 @@ CHECKOUT OPTIONS:
214227
ObjectMapper:
215228
:commit: a593b4d647a970b3d184d046f8f52b945083ccf9
216229
:git: https://github.com/tristanhimmelman/ObjectMapper.git
230+
Sodium:
231+
:commit: 1763670c2fff9739f180ff91dc4891c47146eaac
232+
:git: https://github.com/jedisct1/swift-sodium.git
217233
ViewRow:
218234
:commit: cf9bfd2320a07de716476e8b1c194fe2845b46bd
219235
:git: https://github.com/EurekaCommunity/ViewRow
@@ -246,8 +262,11 @@ SPEC CHECKSUMS:
246262
PromisesObjC: 8c196f5a328c2cba3e74624585467a557dcb482f
247263
Protobuf: 3dac39b34a08151c6d949560efe3f86134a3f748
248264
ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
265+
Realm: 100df88a0faf5328f48477427e4b3e1a1598bae3
266+
RealmSwift: 725d1c10df64964b04aaa0058c19ce0f4b4c3f5a
249267
Sentry: df82ff00c907257e62e8ad503ac7afd3a76d52ea
250268
SimulatorStatusMagic: 28d4a9d1a500ac7cea0b2b5a43c1c6ddb40ba56c
269+
Sodium: 8106500200d1a80021cb9ea069ba0ea71fc26291
251270
SwiftGen: 67860cc7c3cfc2ed25b9b74cfd55495fc89f9108
252271
SwiftLint: dfd554ff0dff17288ee574814ccdd5cea85d76f7
253272
SwiftMessages: 633304165351b8e3dcbb81a71f8efcd86f9c1669
@@ -258,6 +277,6 @@ SPEC CHECKSUMS:
258277
XCGLogger: 1943831ef907df55108b0b18657953f868de973b
259278
ZIPFoundation: b1f0de4eed33e74a676f76e12559ab6b75990197
260279

261-
PODFILE CHECKSUM: 5a5a1863f793989a9e23ed1ce1d8412236b6a236
280+
PODFILE CHECKSUM: 75586de75fdb489757e40a3f9fa90549763343a8
262281

263282
COCOAPODS: 1.10.0

‎README.md

+1-8
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ Home Assistant for Apple Platforms
88

99
## Getting Started
1010

11-
Home Assistant uses Bundler, Cocoapods and Swift Package Manager to manage build dependencies. You'll need Xcode 12.0 (or later) which you can download from the [App Store](https://developer.apple.com/download/). You can get this running using the following commands:
11+
Home Assistant uses Bundler, Cocoapods and Swift Package Manager to manage build dependencies. You'll need Xcode 12.1 (or later) which you can download from the [App Store](https://developer.apple.com/download/). You can get this running using the following commands:
1212

1313
```bash
1414
git clone https://github.com/home-assistant/iOS.git
@@ -33,13 +33,6 @@ BUNDLE_ID_PREFIX = some.bundle.prefix
3333

3434
Xcode should generate provisioning profiles in your Team ID and our configuration will disable features your team doesn't have like Critical Alerts. You can find your Team ID on Apple's [developer portal](https://developer.apple.com/account).
3535

36-
## Xcode 12 Issues
37-
38-
Apple shipped Xcode 12 with several regressions that impact Home Assistant and you will need to work around those that we cannot automatically fix in code:
39-
40-
1. If you experience `Clibsodium` module errors, retrying the build should find it afterwards after a few attempts. Once it is able to build once, it should stop misbehaving.
41-
1. For Xcode 12 releases before 12.2 beta 2, you will need to copy `libnfshared.dylib` from an older version of the Xcode 12 betas to run on the iOS 14 simulator. You can replicate the steps the [CI does to get compatibility](https://github.com/home-assistant/iOS/blob/master/.github/workflows/ci.yml).
42-
4336
## Code style
4437

4538
SwiftLint runs as part of Pull Request checks and will run automatically when building the project.

0 commit comments

Comments
 (0)