Skip to content

Commit 52c66cc

Browse files
authored
fix: iOS physical device code signing for SPM-based OpenSSL.framework (#858)
1 parent da2c37d commit 52c66cc

File tree

5 files changed

+205
-160
lines changed

5 files changed

+205
-160
lines changed

docs/ios-setup.md

Lines changed: 61 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,113 +1,95 @@
11
# iOS Setup Guide
22

3-
## SPM Framework Embedding Required
3+
## SPM Framework Signing (Physical Devices)
44

5-
QuickCrypto uses Swift Package Manager (SPM) dependencies that must be manually embedded in your app bundle:
5+
QuickCrypto uses OpenSSL via Swift Package Manager (SPM). On **physical iOS devices**, SPM frameworks require additional configuration to be properly embedded and code-signed in your app bundle.
66

7-
- **OpenSSL 3.6+** (required) - For ML-DSA post-quantum cryptography support
8-
- **Sodium** (optional) - For XSalsa20 cipher support via libsodium (when `SODIUM_ENABLED=1`)
7+
> **Simulator builds work without this configuration.** This is only required for physical device deployment.
98
10-
### Why is this needed?
9+
### Quick Setup
1110

12-
CocoaPods doesn't automatically embed SPM frameworks into the final app bundle. Without this configuration, you'll encounter runtime errors:
11+
Add to your `ios/Podfile`:
1312

14-
```
15-
dyld: Library not loaded: @rpath/OpenSSL.framework/OpenSSL
13+
```ruby
14+
# At the top of your Podfile
15+
require_relative '../node_modules/react-native-quick-crypto/scripts/quickcrypto_spm_fix'
16+
17+
target 'YourAppName' do
18+
# ... your pods ...
19+
20+
post_install do |installer|
21+
react_native_post_install(installer) # if you have this
22+
23+
# Fix QuickCrypto SPM framework signing for physical devices
24+
quickcrypto_fix_spm_signing(installer)
25+
end
26+
end
1627
```
1728

18-
This is a temporary limitation of mixing CocoaPods + SPM. It will be resolved when React Native fully migrates to SPM (expected 2026).
29+
Then run:
1930

20-
## Configuration
31+
```bash
32+
cd ios && pod install
33+
```
34+
35+
### Why is this needed?
2136

22-
Add the following to your `ios/Podfile` inside the `post_install` hook:
37+
When you try to install on a physical device without this fix, you'll see:
2338

24-
```ruby
25-
post_install do |installer|
26-
# ... your existing post_install code (react_native_post_install, etc.) ...
27-
28-
# Embed SPM frameworks from QuickCrypto
29-
main_project_path = File.join(installer.sandbox.root.parent, 'YourAppName.xcodeproj')
30-
main_project = Xcodeproj::Project.open(main_project_path)
31-
app_target = main_project.targets.find { |t| t.name == 'YourAppName' }
32-
33-
if app_target
34-
embed_phase_name = 'Embed SPM Frameworks (QuickCrypto)'
35-
existing_phase = app_target.shell_script_build_phases.find { |p| p.name == embed_phase_name }
36-
37-
unless existing_phase
38-
phase = app_target.new_shell_script_build_phase(embed_phase_name)
39-
phase.shell_script = <<~SCRIPT
40-
mkdir -p "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}"
41-
42-
# Embed OpenSSL.framework (required for ML-DSA)
43-
if [ -d "${BUILT_PRODUCTS_DIR}/OpenSSL.framework" ]; then
44-
rsync -av --delete "${BUILT_PRODUCTS_DIR}/OpenSSL.framework" "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/"
45-
if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" ]; then
46-
/usr/bin/codesign --force --sign "${EXPANDED_CODE_SIGN_IDENTITY}" --preserve-metadata=identifier,entitlements "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework"
47-
fi
48-
fi
49-
50-
# Embed Sodium.framework (optional, if SODIUM_ENABLED=1)
51-
if [ -d "${BUILT_PRODUCTS_DIR}/Sodium.framework" ]; then
52-
rsync -av --delete "${BUILT_PRODUCTS_DIR}/Sodium.framework" "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/"
53-
if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" ]; then
54-
/usr/bin/codesign --force --sign "${EXPANDED_CODE_SIGN_IDENTITY}" --preserve-metadata=identifier,entitlements "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sodium.framework"
55-
fi
56-
fi
57-
SCRIPT
58-
59-
# Insert before the CocoaPods embed frameworks phase
60-
embed_pods_phase = app_target.shell_script_build_phases.find { |p| p.name == '[CP] Embed Pods Frameworks' }
61-
if embed_pods_phase
62-
app_target.build_phases.move(phase, app_target.build_phases.index(embed_pods_phase))
63-
end
64-
65-
main_project.save
66-
end
67-
end
68-
end
6939
```
40+
Failed to verify code signature of .../OpenSSL.framework : 0xe8008015
41+
```
42+
43+
This happens because:
44+
1. OpenSSL is distributed as a pre-built, pre-signed xcframework via SPM
45+
2. CocoaPods' `spm_dependency` adds it to the Pods project but doesn't embed it in your app
46+
3. The framework must be re-signed with your app's code signing identity
47+
48+
This is a known limitation of mixing CocoaPods + SPM. See [issue #857](https://github.com/margelo/react-native-quick-crypto/issues/857).
7049

71-
**Important:** Replace `YourAppName` with your actual Xcode target name (usually matches your app name).
50+
### Multiple Targets
7251

73-
## Example
52+
If you have multiple app targets, specify which one:
7453

75-
See the [example app's Podfile](../../example/ios/Podfile) for a complete working reference.
54+
```ruby
55+
quickcrypto_fix_spm_signing(installer, app_target_name: 'YourSpecificTarget')
56+
```
7657

7758
## Enabling libsodium (Optional)
7859

79-
To enable XSalsa20 cipher support, set the environment variable before installing pods:
60+
For XSalsa20 cipher support, set the environment variable before your target:
8061

8162
```ruby
82-
# At the top of your Podfile
8363
ENV['SODIUM_ENABLED'] = '1'
84-
```
85-
86-
Then run:
8764

88-
```bash
89-
cd ios && pod install
65+
target 'YourAppName' do
66+
# ...
67+
end
9068
```
9169

9270
## Troubleshooting
9371

94-
### Error: "Library not loaded: @rpath/OpenSSL.framework/OpenSSL"
72+
### Error: `0xe8008015` on physical device
9573

96-
This means the SPM frameworks aren't being embedded. Verify:
74+
This is the code signing error. Make sure you've added `quickcrypto_fix_spm_signing(installer)` to your Podfile's `post_install` hook and run `pod install`.
9775

98-
1. The `post_install` hook is properly configured in your Podfile
99-
2. You're using `use_frameworks! :linkage => :dynamic` (required for SPM dependencies)
100-
3. Run `cd ios && pod install` after modifying the Podfile
101-
4. Clean build folder in Xcode (Cmd+Shift+K) and rebuild
76+
### Error: "Library not loaded: @rpath/OpenSSL.framework"
10277

103-
### Dynamic Frameworks Required
78+
Same fix - the `quickcrypto_fix_spm_signing` function handles both embedding and signing.
10479

105-
QuickCrypto requires dynamic framework linking due to SPM dependencies. Add this to your Podfile:
80+
### Build still fails after adding the fix
10681

107-
```ruby
108-
use_frameworks! :linkage => :dynamic
109-
```
82+
1. Clean build: `Cmd+Shift+K` in Xcode
83+
2. Delete derived data: `rm -rf ~/Library/Developer/Xcode/DerivedData`
84+
3. Run `pod install` again
85+
4. Rebuild
86+
87+
### "Could not find main Xcode project" warning
88+
89+
The helper script couldn't find your `.xcodeproj` file. Use the `app_target_name` parameter or check that your project structure is standard.
90+
91+
## The SPM Situation
11092

111-
## Future
93+
Yes, this is unfortunate. CocoaPods is being deprecated, SPM is supposed to be the future, but SPM's handling of binary frameworks with CocoaPods is broken. The `spm_dependency` bridge in React Native doesn't properly handle framework embedding and code signing.
11294

113-
When React Native completes its migration to Swift Package Manager (expected 2026), this manual embedding step will no longer be necessary. SPM packages will be properly integrated by default.
95+
This workaround will be unnecessary when React Native fully migrates to SPM (timeline unclear).

example/ios/Podfile

Lines changed: 5 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
ENV['RCT_NEW_ARCH_ENABLED'] = '1'
22
ENV['SODIUM_ENABLED'] = '1'
33

4+
# Fix QuickCrypto SPM framework signing for physical devices
5+
require_relative '../../packages/react-native-quick-crypto/scripts/quickcrypto_spm_fix'
6+
47
# Resolve react_native_pods.rb with node to allow for hoisting
58
require Pod::Executable.execute_command('node', ['-p',
69
'require.resolve(
@@ -59,45 +62,7 @@ target 'QuickCryptoExample' do
5962
end
6063
end
6164

62-
# Embed SPM frameworks from QuickCrypto into the app bundle
63-
# SPM frameworks added to Pods project need manual embedding
64-
main_project_path = File.join(installer.sandbox.root.parent, 'QuickCryptoExample.xcodeproj')
65-
main_project = Xcodeproj::Project.open(main_project_path)
66-
app_target = main_project.targets.find { |t| t.name == 'QuickCryptoExample' }
67-
68-
if app_target
69-
embed_phase_name = 'Embed SPM Frameworks (QuickCrypto)'
70-
existing_phase = app_target.shell_script_build_phases.find { |p| p.name == embed_phase_name }
71-
72-
unless existing_phase
73-
phase = app_target.new_shell_script_build_phase(embed_phase_name)
74-
phase.shell_script = <<~SCRIPT
75-
# Embed OpenSSL.framework from SPM build into app bundle
76-
# SPM builds the framework to BUILT_PRODUCTS_DIR but doesn't embed it
77-
OPENSSL_FRAMEWORK="${BUILT_PRODUCTS_DIR}/OpenSSL.framework"
78-
79-
if [ -d "$OPENSSL_FRAMEWORK" ]; then
80-
echo "Found OpenSSL.framework at $OPENSSL_FRAMEWORK"
81-
rsync -av --delete "$OPENSSL_FRAMEWORK" "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/"
82-
83-
if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" ] && [ "${CODE_SIGNING_REQUIRED:-}" != "NO" ]; then
84-
/usr/bin/codesign --force --sign "${EXPANDED_CODE_SIGN_IDENTITY}" --preserve-metadata=identifier,entitlements "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework"
85-
fi
86-
echo "OpenSSL.framework embedded successfully"
87-
else
88-
echo "warning: OpenSSL.framework not found at $OPENSSL_FRAMEWORK"
89-
fi
90-
SCRIPT
91-
92-
# Move it before the existing embed frameworks phase
93-
embed_pods_phase = app_target.shell_script_build_phases.find { |p| p.name == '[CP] Embed Pods Frameworks' }
94-
if embed_pods_phase
95-
app_target.build_phases.move(phase, app_target.build_phases.index(embed_pods_phase))
96-
end
97-
98-
main_project.save
99-
Pod::UI.puts "[QuickCrypto] Added 'Embed SPM Frameworks (QuickCrypto)' build phase"
100-
end
101-
end
65+
# Fix QuickCrypto SPM framework signing for physical devices
66+
quickcrypto_fix_spm_signing(installer)
10267
end
10368
end

example/ios/Podfile.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2845,6 +2845,6 @@ SPEC CHECKSUMS:
28452845
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
28462846
Yoga: 11c9686a21e2cd82a094a723649d9f4507200fb0
28472847

2848-
PODFILE CHECKSUM: a55db5270505ab83586da7672ed603a4ad498447
2848+
PODFILE CHECKSUM: c53d893905e8bc54582367d8191b1d2814070820
28492849

28502850
COCOAPODS: 1.15.2

example/ios/QuickCryptoExample.xcodeproj/project.pbxproj

Lines changed: 6 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -114,11 +114,9 @@
114114
13B07F8C1A680F5B00A75B9A /* Frameworks */,
115115
13B07F8E1A680F5B00A75B9A /* Resources */,
116116
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
117-
8C63FDE6D14F20AAC744357A /* Embed SPM Frameworks (OpenSSL) */,
118-
F008C3222B5CD8109E252C6E /* Embed SPM Frameworks (QuickCrypto) */,
119117
00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */,
120118
E235C05ADACE081382539298 /* [CP] Copy Pods Resources */,
121-
0F887C4BF3EDDB98EDD8A258 /* [CP-User] [CP-User] Embed OpenSSL Framework */,
119+
218A62117F2E6018338554EF /* [QuickCrypto] Embed & Sign SPM Frameworks */,
122120
);
123121
buildRules = (
124122
);
@@ -207,23 +205,7 @@
207205
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-QuickCryptoExample/Pods-QuickCryptoExample-frameworks.sh\"\n";
208206
showEnvVarsInLog = 0;
209207
};
210-
0F887C4BF3EDDB98EDD8A258 /* [CP-User] [CP-User] Embed OpenSSL Framework */ = {
211-
isa = PBXShellScriptBuildPhase;
212-
buildActionMask = 2147483647;
213-
files = (
214-
);
215-
inputPaths = (
216-
"${BUILT_PRODUCTS_DIR}/OpenSSL.framework",
217-
);
218-
name = "[CP-User] [CP-User] Embed OpenSSL Framework";
219-
outputPaths = (
220-
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework",
221-
);
222-
runOnlyForDeploymentPostprocessing = 0;
223-
shellPath = /bin/sh;
224-
shellScript = "#!/bin/bash\nset -e\n\nOPENSSL_FRAMEWORK=\"${BUILT_PRODUCTS_DIR}/OpenSSL.framework\"\n\nif [ -d \"$OPENSSL_FRAMEWORK\" ]; then\n echo \"[QuickCrypto] Copying OpenSSL.framework to app bundle\"\n mkdir -p \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n cp -Rf \"$OPENSSL_FRAMEWORK\" \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/\"\n \n # Code sign the framework (only if code signing is required and not a simulator build)\n if [ \"${CODE_SIGNING_REQUIRED}\" = \"YES\" ] && [ \"${EFFECTIVE_PLATFORM_NAME}\" != \"-iphonesimulator\" ]; then\n codesign --force --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" --preserve-metadata=identifier,entitlements --timestamp=none \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework\" || true\n fi\n echo \"[QuickCrypto] Successfully embedded OpenSSL.framework\"\nelse\n echo \"[QuickCrypto] Warning: OpenSSL.framework not found at $OPENSSL_FRAMEWORK\"\nfi\n";
225-
};
226-
8C63FDE6D14F20AAC744357A /* Embed SPM Frameworks (OpenSSL) */ = {
208+
218A62117F2E6018338554EF /* [QuickCrypto] Embed & Sign SPM Frameworks */ = {
227209
isa = PBXShellScriptBuildPhase;
228210
buildActionMask = 2147483647;
229211
files = (
@@ -232,14 +214,14 @@
232214
);
233215
inputPaths = (
234216
);
235-
name = "Embed SPM Frameworks (OpenSSL)";
217+
name = "[QuickCrypto] Embed & Sign SPM Frameworks";
236218
outputFileListPaths = (
237219
);
238220
outputPaths = (
239221
);
240222
runOnlyForDeploymentPostprocessing = 0;
241223
shellPath = /bin/sh;
242-
shellScript = "# Embed OpenSSL.framework from SPM build into app bundle\n# SPM builds the framework to BUILT_PRODUCTS_DIR but doesn't embed it\nOPENSSL_FRAMEWORK=\"${BUILT_PRODUCTS_DIR}/OpenSSL.framework\"\n\nif [ -d \"$OPENSSL_FRAMEWORK\" ]; then\n echo \"Found OpenSSL.framework at $OPENSSL_FRAMEWORK\"\n mkdir -p \"${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n rsync -av --delete \"$OPENSSL_FRAMEWORK\" \"${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/\"\n\n # Code sign if required\n if [ -n \"${EXPANDED_CODE_SIGN_IDENTITY:-}\" ] && [ \"${CODE_SIGNING_REQUIRED:-}\" != \"NO\" ]; then\n /usr/bin/codesign --force --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" --preserve-metadata=identifier,entitlements \"${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework\"\n fi\n echo \"OpenSSL.framework embedded successfully\"\nelse\n echo \"warning: OpenSSL.framework not found at $OPENSSL_FRAMEWORK\"\nfi\n";
224+
shellScript = "set -euo pipefail\n\n# Embed and sign SPM frameworks (OpenSSL) from QuickCrypto\n# This phase MUST run LAST, after all other framework embedding\n# See: https://github.com/margelo/react-native-quick-crypto/issues/857\n\nFRAMEWORKS_DIR=\"${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\nmkdir -p \"$FRAMEWORKS_DIR\"\n\nsign_framework() {\n local framework_path=\"$1\"\n local framework_name=$(basename \"$framework_path\")\n\n if [ ! -d \"$framework_path\" ]; then\n echo \"warning: $framework_name not found at $framework_path, skipping\"\n return 0\n fi\n\n echo \"[QuickCrypto] Processing $framework_name...\"\n\n # Copy to app bundle\n rsync -av --delete \"$framework_path\" \"$FRAMEWORKS_DIR/\"\n\n local dest_framework=\"$FRAMEWORKS_DIR/$framework_name\"\n\n # Sign if required (physical device builds only)\n if [ \"${CODE_SIGNING_REQUIRED:-NO}\" = \"YES\" ] && [ -n \"${EXPANDED_CODE_SIGN_IDENTITY:-}\" ]; then\n echo \"[QuickCrypto] Signing $framework_name with identity: ${EXPANDED_CODE_SIGN_IDENTITY}\"\n\n # Make framework writable (rsync preserves read-only from source)\n chmod -R u+w \"$dest_framework\"\n\n # Strip existing signature and re-sign with app's identity\n # This is required for pre-signed xcframeworks from SPM\n /usr/bin/codesign --force --deep --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" \\\n --timestamp=none \\\n \"$dest_framework\"\n\n echo \"[QuickCrypto] Successfully signed $framework_name\"\n else\n echo \"[QuickCrypto] Code signing not required (simulator build)\"\n fi\n}\n\n# Sign OpenSSL.framework from SPM\nsign_framework \"${BUILT_PRODUCTS_DIR}/OpenSSL.framework\"\n\necho \"[QuickCrypto] SPM framework embedding complete\"\n";
243225
};
244226
C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = {
245227
isa = PBXShellScriptBuildPhase;
@@ -280,24 +262,6 @@
280262
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-QuickCryptoExample/Pods-QuickCryptoExample-resources.sh\"\n";
281263
showEnvVarsInLog = 0;
282264
};
283-
F008C3222B5CD8109E252C6E /* Embed SPM Frameworks (QuickCrypto) */ = {
284-
isa = PBXShellScriptBuildPhase;
285-
buildActionMask = 2147483647;
286-
files = (
287-
);
288-
inputFileListPaths = (
289-
);
290-
inputPaths = (
291-
);
292-
name = "Embed SPM Frameworks (QuickCrypto)";
293-
outputFileListPaths = (
294-
);
295-
outputPaths = (
296-
);
297-
runOnlyForDeploymentPostprocessing = 0;
298-
shellPath = /bin/sh;
299-
shellScript = "# Embed SPM frameworks (OpenSSL, Clibsodium) from QuickCrypto into app bundle\n# SPM builds frameworks to BUILT_PRODUCTS_DIR but doesn't embed them automatically\n\nmkdir -p \"${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\n# Embed OpenSSL.framework (always required for ML-DSA)\nOPENSSL_FRAMEWORK=\"${BUILT_PRODUCTS_DIR}/OpenSSL.framework\"\nif [ -d \"$OPENSSL_FRAMEWORK\" ]; then\n echo \"Found OpenSSL.framework at $OPENSSL_FRAMEWORK\"\n rsync -av --delete \"$OPENSSL_FRAMEWORK\" \"${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/\"\n\n if [ -n \"${EXPANDED_CODE_SIGN_IDENTITY:-}\" ] && [ \"${CODE_SIGNING_REQUIRED:-}\" != \"NO\" ]; then\n /usr/bin/codesign --force --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" --preserve-metadata=identifier,entitlements \"${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework\"\n fi\n echo \"OpenSSL.framework embedded successfully\"\nelse\n echo \"warning: OpenSSL.framework not found at $OPENSSL_FRAMEWORK\"\nfi\n\n# Embed Clibsodium.framework (optional, when SODIUM_ENABLED=1)\nCLIBSODIUM_FRAMEWORK=\"${BUILT_PRODUCTS_DIR}/Clibsodium.framework\"\nif [ -d \"$CLIBSODIUM_FRAMEWORK\" ]; then\n echo \"Found Clibsodium.framework at $CLIBSODIUM_FRAMEWORK\"\n rsync -av --delete \"$CLIBSODIUM_FRAMEWORK\" \"${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/\"\n\n if [ -n \"${EXPANDED_CODE_SIGN_IDENTITY:-}\" ] && [ \"${CODE_SIGNING_REQUIRED:-}\" != \"NO\" ]; then\n /usr/bin/codesign --force --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" --preserve-metadata=identifier,entitlements \"${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/Clibsodium.framework\"\n fi\n echo \"Clibsodium.framework embedded successfully\"\nfi\n";
300-
};
301265
/* End PBXShellScriptBuildPhase section */
302266

303267
/* Begin PBXSourcesBuildPhase section */
@@ -319,6 +283,7 @@
319283
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
320284
CLANG_ENABLE_MODULES = YES;
321285
CURRENT_PROJECT_VERSION = 1;
286+
DEVELOPMENT_TEAM = 64977D8TY3;
322287
ENABLE_BITCODE = NO;
323288
INFOPLIST_FILE = QuickCryptoExample/Info.plist;
324289
IPHONEOS_DEPLOYMENT_TARGET = 16.1;
@@ -347,6 +312,7 @@
347312
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
348313
CLANG_ENABLE_MODULES = YES;
349314
CURRENT_PROJECT_VERSION = 1;
315+
DEVELOPMENT_TEAM = 64977D8TY3;
350316
INFOPLIST_FILE = QuickCryptoExample/Info.plist;
351317
IPHONEOS_DEPLOYMENT_TARGET = 16.1;
352318
LD_RUNPATH_SEARCH_PATHS = (

0 commit comments

Comments
 (0)