Repository navigation
Commit 3c168a5
authored
Sign inner .framework bundles too; dart_bridge 1.7.1 (#38)
* Sign inner .framework bundles too, not just the outer xcframework
20260729 signed each outer .xcframework but left the .framework bundles inside
every slice unsigned. An App Store IPA built against it reported `signed = true`
but `isSecureTimestamp = false` for Python-ios, _ssl, _hashlib and dart_bridge,
even though the outer seals carry genuine Apple TSA timestamps -- the receipt
cdhashes match the published artifacts byte for byte, so Xcode was reading our
signatures. The same result appeared in a development archive and an App Store
export, so the export method was not the variable.
The control that settles it: krzyzanowskim/OpenSSL 3.6.3000, an XCFramework
Apple's App Store scan demonstrably accepts, signs all ten of its slices with an
Apple Distribution identity and a secure timestamp, then signs the outer bundle
last. An unsigned inner framework was the only structural difference left.
xcf_sign_one now signs each slice's .framework first and the outer bundle last.
The order is not optional: the outer seal hashes the bundle contents, so signing
an inner framework afterwards would invalidate it. No -i for the inner bundles --
a .framework has a real CFBundleIdentifier in its own Info.plist.
Verification was refactored into xcf_assert_signature (verifiable, not ad-hoc,
secure timestamp, expected authority and team) and now covers every slice
framework as well as the outer bundle, so an unsigned inner framework fails the
release rather than shipping.
No script outside the shared helper changes: sign_darwin_archives.sh already
signs the finished archives through xcf_sign_one, and inner _CodeSignature
directories survive both `xcodebuild -create-xcframework` and the tar round trip.
This does add roughly two extra codesign invocations per xcframework -- about 500
TSA round trips across the three Python versions -- so expect
sign-darwin-artifacts to take noticeably longer than on 20260729.
* Bump dart bridge version to 1.7.1
1.7.1 is the first dart_bridge release whose dart_bridge.framework slices are
signed, not just the outer xcframework -- the counterpart of the change on this
branch for the Python XCFrameworks (flet-dev/dart-bridge#14).
Both halves have to move together. An IPA that picks up a 1.7.0 dart_bridge
alongside inner-signed Python XCFrameworks would still carry one receipt
reporting isSecureTimestamp = false, which leaves the ITMS-91065 question
unanswered rather than answered.
Version-keyed consumer caches hold the outer-only-signed 1.7.0 zip, so this must
be a version bump rather than a re-release. Compiled binaries are unchanged from
1.7.0 on every platform.
* Find slice frameworks by glob, not by the xcframework's name
xcf_slice_frameworks located each slice's bundle as <slice>/<xcframework
basename>.framework. Everything this repo publishes has matching names, but the
assumption fails silently rather than loudly when it does not hold: serious_python
stages Python.xcframework as Python-<platform>.xcframework, and an unsigned inner
framework in a renamed copy would be reported as "no slice frameworks found"
instead of as unsigned.
Globbing <slice>/*.framework removes the assumption. xcf_signing_identifier now
walks the same enumerator instead of repeating the name-keyed lookup.
Verification only -- signed output is unchanged. Keeps this helper byte-identical
to dart-bridge's copy (flet-dev/dart-bridge#15).1 parent 7d064ec commit 3c168a5
3 files changed
Lines changed: 132 additions & 37 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
65 | 65 | | |
66 | 66 | | |
67 | 67 | | |
68 | | - | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
69 | 79 | | |
70 | 80 | | |
71 | 81 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
124 | 124 | | |
125 | 125 | | |
126 | 126 | | |
127 | | - | |
128 | | - | |
| 127 | + | |
129 | 128 | | |
130 | | - | |
131 | | - | |
132 | | - | |
| 129 | + | |
| 130 | + | |
133 | 131 | | |
134 | 132 | | |
135 | | - | |
136 | | - | |
| 133 | + | |
137 | 134 | | |
138 | 135 | | |
139 | 136 | | |
| |||
142 | 139 | | |
143 | 140 | | |
144 | 141 | | |
145 | | - | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
146 | 145 | | |
147 | 146 | | |
148 | 147 | | |
149 | | - | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
150 | 187 | | |
151 | 188 | | |
152 | 189 | | |
| |||
158 | 195 | | |
159 | 196 | | |
160 | 197 | | |
161 | | - | |
| 198 | + | |
162 | 199 | | |
163 | 200 | | |
164 | | - | |
165 | | - | |
166 | | - | |
167 | | - | |
168 | | - | |
169 | | - | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
170 | 224 | | |
171 | 225 | | |
172 | | - | |
173 | | - | |
174 | | - | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
175 | 231 | | |
176 | 232 | | |
177 | 233 | | |
178 | | - | |
179 | | - | |
180 | | - | |
181 | | - | |
182 | | - | |
183 | | - | |
184 | | - | |
| 234 | + | |
| 235 | + | |
185 | 236 | | |
186 | 237 | | |
187 | 238 | | |
188 | 239 | | |
189 | | - | |
190 | | - | |
| 240 | + | |
| 241 | + | |
191 | 242 | | |
192 | 243 | | |
193 | | - | |
194 | 244 | | |
195 | | - | |
196 | | - | |
197 | 245 | | |
198 | | - | |
| 246 | + | |
199 | 247 | | |
200 | 248 | | |
201 | 249 | | |
202 | 250 | | |
203 | 251 | | |
204 | 252 | | |
205 | 253 | | |
206 | | - | |
| 254 | + | |
207 | 255 | | |
208 | 256 | | |
209 | 257 | | |
210 | 258 | | |
211 | | - | |
| 259 | + | |
212 | 260 | | |
213 | 261 | | |
214 | 262 | | |
215 | 263 | | |
216 | 264 | | |
217 | 265 | | |
218 | 266 | | |
219 | | - | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
220 | 290 | | |
221 | 291 | | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
222 | 301 | | |
223 | 302 | | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
224 | 309 | | |
225 | 310 | | |
226 | 311 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
0 commit comments