@use-voltra/ios-client 2.1.1 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (365) hide show
  1. package/README.md +61 -8
  2. package/Voltra.podspec +1 -0
  3. package/build/commonjs/dynamic-widget/api.js +15 -0
  4. package/build/commonjs/dynamic-widget/api.js.map +1 -0
  5. package/build/commonjs/events.js +23 -0
  6. package/build/commonjs/events.js.map +1 -1
  7. package/build/commonjs/index.js +74 -7
  8. package/build/commonjs/index.js.map +1 -1
  9. package/build/commonjs/live-activity/api.js +3 -1
  10. package/build/commonjs/live-activity/api.js.map +1 -1
  11. package/build/commonjs/live-activity/dynamic-api.js +173 -0
  12. package/build/commonjs/live-activity/dynamic-api.js.map +1 -0
  13. package/build/commonjs/native/NativeVoltra.js.map +1 -1
  14. package/build/commonjs/utils/enableDynamicLiveActivityHotReload.js +47 -0
  15. package/build/commonjs/utils/enableDynamicLiveActivityHotReload.js.map +1 -0
  16. package/build/commonjs/utils/enableWidgetHotReload.js +8 -11
  17. package/build/commonjs/utils/enableWidgetHotReload.js.map +1 -1
  18. package/build/commonjs/utils/useUpdateOnHMR.js +3 -7
  19. package/build/commonjs/utils/useUpdateOnHMR.js.map +1 -1
  20. package/build/commonjs/widgets/server-credentials.js +9 -0
  21. package/build/commonjs/widgets/server-credentials.js.map +1 -1
  22. package/build/commonjs/widgets/server-update.js +78 -0
  23. package/build/commonjs/widgets/server-update.js.map +1 -0
  24. package/build/module/dynamic-widget/api.js +10 -0
  25. package/build/module/dynamic-widget/api.js.map +1 -0
  26. package/build/module/events.js +23 -0
  27. package/build/module/events.js.map +1 -1
  28. package/build/module/index.js +4 -0
  29. package/build/module/index.js.map +1 -1
  30. package/build/module/live-activity/api.js +2 -2
  31. package/build/module/live-activity/api.js.map +1 -1
  32. package/build/module/live-activity/dynamic-api.js +167 -0
  33. package/build/module/live-activity/dynamic-api.js.map +1 -0
  34. package/build/module/native/NativeVoltra.js.map +1 -1
  35. package/build/module/utils/enableDynamicLiveActivityHotReload.js +43 -0
  36. package/build/module/utils/enableDynamicLiveActivityHotReload.js.map +1 -0
  37. package/build/module/utils/enableWidgetHotReload.js +9 -11
  38. package/build/module/utils/enableWidgetHotReload.js.map +1 -1
  39. package/build/module/utils/useUpdateOnHMR.js +3 -7
  40. package/build/module/utils/useUpdateOnHMR.js.map +1 -1
  41. package/build/module/widgets/server-credentials.js +9 -0
  42. package/build/module/widgets/server-credentials.js.map +1 -1
  43. package/build/module/widgets/server-update.js +72 -0
  44. package/build/module/widgets/server-update.js.map +1 -0
  45. package/build/typescript/commonjs/dynamic-widget/api.d.ts +8 -0
  46. package/build/typescript/commonjs/dynamic-widget/api.d.ts.map +1 -0
  47. package/build/typescript/commonjs/events.d.ts +7 -0
  48. package/build/typescript/commonjs/events.d.ts.map +1 -1
  49. package/build/typescript/commonjs/index.d.ts +4 -0
  50. package/build/typescript/commonjs/index.d.ts.map +1 -1
  51. package/build/typescript/commonjs/live-activity/api.d.ts +7 -0
  52. package/build/typescript/commonjs/live-activity/api.d.ts.map +1 -1
  53. package/build/typescript/commonjs/live-activity/dynamic-api.d.ts +54 -0
  54. package/build/typescript/commonjs/live-activity/dynamic-api.d.ts.map +1 -0
  55. package/build/typescript/commonjs/native/NativeVoltra.d.ts +21 -0
  56. package/build/typescript/commonjs/native/NativeVoltra.d.ts.map +1 -1
  57. package/build/typescript/commonjs/types.d.ts +1 -1
  58. package/build/typescript/commonjs/types.d.ts.map +1 -1
  59. package/build/typescript/commonjs/utils/enableDynamicLiveActivityHotReload.d.ts +15 -0
  60. package/build/typescript/commonjs/utils/enableDynamicLiveActivityHotReload.d.ts.map +1 -0
  61. package/build/typescript/commonjs/utils/enableWidgetHotReload.d.ts +5 -7
  62. package/build/typescript/commonjs/utils/enableWidgetHotReload.d.ts.map +1 -1
  63. package/build/typescript/commonjs/utils/useUpdateOnHMR.d.ts +0 -3
  64. package/build/typescript/commonjs/utils/useUpdateOnHMR.d.ts.map +1 -1
  65. package/build/typescript/commonjs/widgets/server-credentials.d.ts +8 -0
  66. package/build/typescript/commonjs/widgets/server-credentials.d.ts.map +1 -1
  67. package/build/typescript/commonjs/widgets/server-update.d.ts +64 -0
  68. package/build/typescript/commonjs/widgets/server-update.d.ts.map +1 -0
  69. package/build/typescript/module/dynamic-widget/api.d.ts +8 -0
  70. package/build/typescript/module/dynamic-widget/api.d.ts.map +1 -0
  71. package/build/typescript/module/events.d.ts +7 -0
  72. package/build/typescript/module/events.d.ts.map +1 -1
  73. package/build/typescript/module/index.d.ts +4 -0
  74. package/build/typescript/module/index.d.ts.map +1 -1
  75. package/build/typescript/module/live-activity/api.d.ts +7 -0
  76. package/build/typescript/module/live-activity/api.d.ts.map +1 -1
  77. package/build/typescript/module/live-activity/dynamic-api.d.ts +54 -0
  78. package/build/typescript/module/live-activity/dynamic-api.d.ts.map +1 -0
  79. package/build/typescript/module/native/NativeVoltra.d.ts +21 -0
  80. package/build/typescript/module/native/NativeVoltra.d.ts.map +1 -1
  81. package/build/typescript/module/types.d.ts +1 -1
  82. package/build/typescript/module/types.d.ts.map +1 -1
  83. package/build/typescript/module/utils/enableDynamicLiveActivityHotReload.d.ts +15 -0
  84. package/build/typescript/module/utils/enableDynamicLiveActivityHotReload.d.ts.map +1 -0
  85. package/build/typescript/module/utils/enableWidgetHotReload.d.ts +5 -7
  86. package/build/typescript/module/utils/enableWidgetHotReload.d.ts.map +1 -1
  87. package/build/typescript/module/utils/useUpdateOnHMR.d.ts +0 -3
  88. package/build/typescript/module/utils/useUpdateOnHMR.d.ts.map +1 -1
  89. package/build/typescript/module/widgets/server-credentials.d.ts +8 -0
  90. package/build/typescript/module/widgets/server-credentials.d.ts.map +1 -1
  91. package/build/typescript/module/widgets/server-update.d.ts +64 -0
  92. package/build/typescript/module/widgets/server-update.d.ts.map +1 -0
  93. package/expo-plugin/build/cjs/constants.js +20 -1
  94. package/expo-plugin/build/cjs/constants.js.map +1 -1
  95. package/expo-plugin/build/cjs/index.js +9 -1
  96. package/expo-plugin/build/cjs/index.js.map +1 -1
  97. package/expo-plugin/build/cjs/ios/index.js +1 -0
  98. package/expo-plugin/build/cjs/ios/index.js.map +1 -1
  99. package/expo-plugin/build/cjs/ios/infoPlist.js +28 -5
  100. package/expo-plugin/build/cjs/ios/infoPlist.js.map +1 -1
  101. package/expo-plugin/build/cjs/ios/serverUpdate.js +25 -0
  102. package/expo-plugin/build/cjs/ios/serverUpdate.js.map +1 -0
  103. package/expo-plugin/build/cjs/ios-widget/clientRendered.js +4 -4
  104. package/expo-plugin/build/cjs/ios-widget/clientRendered.js.map +1 -1
  105. package/expo-plugin/build/cjs/ios-widget/clientRenderedPrerender.js +5 -5
  106. package/expo-plugin/build/cjs/ios-widget/clientRenderedPrerender.js.map +1 -1
  107. package/expo-plugin/build/cjs/ios-widget/dynamic-live-activity/swift.js +130 -0
  108. package/expo-plugin/build/cjs/ios-widget/dynamic-live-activity/swift.js.map +1 -0
  109. package/expo-plugin/build/cjs/ios-widget/files/index.js +9 -2
  110. package/expo-plugin/build/cjs/ios-widget/files/index.js.map +1 -1
  111. package/expo-plugin/build/cjs/ios-widget/files/infoPlist.js +6 -3
  112. package/expo-plugin/build/cjs/ios-widget/files/infoPlist.js.map +1 -1
  113. package/expo-plugin/build/cjs/ios-widget/files/manifest.js +24 -0
  114. package/expo-plugin/build/cjs/ios-widget/files/manifest.js.map +1 -1
  115. package/expo-plugin/build/cjs/ios-widget/files/swift-utils.js +7 -0
  116. package/expo-plugin/build/cjs/ios-widget/files/swift-utils.js.map +1 -0
  117. package/expo-plugin/build/cjs/ios-widget/files/swift.js +56 -26
  118. package/expo-plugin/build/cjs/ios-widget/files/swift.js.map +1 -1
  119. package/expo-plugin/build/cjs/ios-widget/index.js +9 -3
  120. package/expo-plugin/build/cjs/ios-widget/index.js.map +1 -1
  121. package/expo-plugin/build/cjs/ios-widget/podfile.js +38 -12
  122. package/expo-plugin/build/cjs/ios-widget/podfile.js.map +1 -1
  123. package/expo-plugin/build/cjs/ios-widget/widgetPlist.js +34 -22
  124. package/expo-plugin/build/cjs/ios-widget/widgetPlist.js.map +1 -1
  125. package/expo-plugin/build/cjs/ios-widget/xcode/buildPhases.js +194 -118
  126. package/expo-plugin/build/cjs/ios-widget/xcode/buildPhases.js.map +1 -1
  127. package/expo-plugin/build/cjs/ios-widget/xcode/configurationList.js +30 -22
  128. package/expo-plugin/build/cjs/ios-widget/xcode/configurationList.js.map +1 -1
  129. package/expo-plugin/build/cjs/ios-widget/xcode/fileReferences.js +50 -0
  130. package/expo-plugin/build/cjs/ios-widget/xcode/fileReferences.js.map +1 -0
  131. package/expo-plugin/build/cjs/ios-widget/xcode/groups.js +45 -43
  132. package/expo-plugin/build/cjs/ios-widget/xcode/groups.js.map +1 -1
  133. package/expo-plugin/build/cjs/ios-widget/xcode/index.js +93 -91
  134. package/expo-plugin/build/cjs/ios-widget/xcode/index.js.map +1 -1
  135. package/expo-plugin/build/cjs/ios-widget/xcode/mainAppSettings.js +41 -39
  136. package/expo-plugin/build/cjs/ios-widget/xcode/mainAppSettings.js.map +1 -1
  137. package/expo-plugin/build/cjs/ios-widget/xcode/productFile.js +2 -2
  138. package/expo-plugin/build/cjs/ios-widget/xcode/productFile.js.map +1 -1
  139. package/expo-plugin/build/cjs/ios-widget/xcode/target.js +29 -63
  140. package/expo-plugin/build/cjs/ios-widget/xcode/target.js.map +1 -1
  141. package/expo-plugin/build/cjs/utils/urlScheme.js +36 -14
  142. package/expo-plugin/build/cjs/utils/urlScheme.js.map +1 -1
  143. package/expo-plugin/build/cjs/validation.js +54 -0
  144. package/expo-plugin/build/cjs/validation.js.map +1 -1
  145. package/expo-plugin/build/esm/constants.js +17 -0
  146. package/expo-plugin/build/esm/constants.js.map +1 -1
  147. package/expo-plugin/build/esm/index.js +9 -1
  148. package/expo-plugin/build/esm/index.js.map +1 -1
  149. package/expo-plugin/build/esm/ios/index.js +1 -0
  150. package/expo-plugin/build/esm/ios/index.js.map +1 -1
  151. package/expo-plugin/build/esm/ios/infoPlist.js +28 -5
  152. package/expo-plugin/build/esm/ios/infoPlist.js.map +1 -1
  153. package/expo-plugin/build/esm/ios/serverUpdate.js +21 -0
  154. package/expo-plugin/build/esm/ios/serverUpdate.js.map +1 -0
  155. package/expo-plugin/build/esm/ios-widget/clientRendered.js +5 -5
  156. package/expo-plugin/build/esm/ios-widget/clientRendered.js.map +1 -1
  157. package/expo-plugin/build/esm/ios-widget/clientRenderedPrerender.js +6 -6
  158. package/expo-plugin/build/esm/ios-widget/clientRenderedPrerender.js.map +1 -1
  159. package/expo-plugin/build/esm/ios-widget/dynamic-live-activity/swift.js +122 -0
  160. package/expo-plugin/build/esm/ios-widget/dynamic-live-activity/swift.js.map +1 -0
  161. package/expo-plugin/build/esm/ios-widget/files/index.js +10 -3
  162. package/expo-plugin/build/esm/ios-widget/files/index.js.map +1 -1
  163. package/expo-plugin/build/esm/ios-widget/files/infoPlist.js +6 -3
  164. package/expo-plugin/build/esm/ios-widget/files/infoPlist.js.map +1 -1
  165. package/expo-plugin/build/esm/ios-widget/files/manifest.js +23 -1
  166. package/expo-plugin/build/esm/ios-widget/files/manifest.js.map +1 -1
  167. package/expo-plugin/build/esm/ios-widget/files/swift-utils.js +4 -0
  168. package/expo-plugin/build/esm/ios-widget/files/swift-utils.js.map +1 -0
  169. package/expo-plugin/build/esm/ios-widget/files/swift.js +50 -20
  170. package/expo-plugin/build/esm/ios-widget/files/swift.js.map +1 -1
  171. package/expo-plugin/build/esm/ios-widget/index.js +9 -3
  172. package/expo-plugin/build/esm/ios-widget/index.js.map +1 -1
  173. package/expo-plugin/build/esm/ios-widget/podfile.js +36 -11
  174. package/expo-plugin/build/esm/ios-widget/podfile.js.map +1 -1
  175. package/expo-plugin/build/esm/ios-widget/widgetPlist.js +34 -22
  176. package/expo-plugin/build/esm/ios-widget/widgetPlist.js.map +1 -1
  177. package/expo-plugin/build/esm/ios-widget/xcode/buildPhases.js +194 -117
  178. package/expo-plugin/build/esm/ios-widget/xcode/buildPhases.js.map +1 -1
  179. package/expo-plugin/build/esm/ios-widget/xcode/configurationList.js +31 -22
  180. package/expo-plugin/build/esm/ios-widget/xcode/configurationList.js.map +1 -1
  181. package/expo-plugin/build/esm/ios-widget/xcode/fileReferences.js +45 -0
  182. package/expo-plugin/build/esm/ios-widget/xcode/fileReferences.js.map +1 -0
  183. package/expo-plugin/build/esm/ios-widget/xcode/groups.js +45 -42
  184. package/expo-plugin/build/esm/ios-widget/xcode/groups.js.map +1 -1
  185. package/expo-plugin/build/esm/ios-widget/xcode/index.js +97 -96
  186. package/expo-plugin/build/esm/ios-widget/xcode/index.js.map +1 -1
  187. package/expo-plugin/build/esm/ios-widget/xcode/mainAppSettings.js +41 -39
  188. package/expo-plugin/build/esm/ios-widget/xcode/mainAppSettings.js.map +1 -1
  189. package/expo-plugin/build/esm/ios-widget/xcode/productFile.js +3 -2
  190. package/expo-plugin/build/esm/ios-widget/xcode/productFile.js.map +1 -1
  191. package/expo-plugin/build/esm/ios-widget/xcode/target.js +28 -62
  192. package/expo-plugin/build/esm/ios-widget/xcode/target.js.map +1 -1
  193. package/expo-plugin/build/esm/utils/urlScheme.js +34 -14
  194. package/expo-plugin/build/esm/utils/urlScheme.js.map +1 -1
  195. package/expo-plugin/build/esm/validation.js +54 -1
  196. package/expo-plugin/build/esm/validation.js.map +1 -1
  197. package/expo-plugin/build/types/constants.d.ts +10 -1
  198. package/expo-plugin/build/types/constants.d.ts.map +1 -1
  199. package/expo-plugin/build/types/index.d.ts +1 -1
  200. package/expo-plugin/build/types/index.d.ts.map +1 -1
  201. package/expo-plugin/build/types/ios/index.d.ts +2 -0
  202. package/expo-plugin/build/types/ios/index.d.ts.map +1 -1
  203. package/expo-plugin/build/types/ios/infoPlist.d.ts +2 -0
  204. package/expo-plugin/build/types/ios/infoPlist.d.ts.map +1 -1
  205. package/expo-plugin/build/types/ios/serverUpdate.d.ts +11 -0
  206. package/expo-plugin/build/types/ios/serverUpdate.d.ts.map +1 -0
  207. package/expo-plugin/build/types/ios-widget/clientRendered.d.ts.map +1 -1
  208. package/expo-plugin/build/types/ios-widget/clientRenderedPrerender.d.ts.map +1 -1
  209. package/expo-plugin/build/types/ios-widget/dynamic-live-activity/swift.d.ts +7 -0
  210. package/expo-plugin/build/types/ios-widget/dynamic-live-activity/swift.d.ts.map +1 -0
  211. package/expo-plugin/build/types/ios-widget/files/index.d.ts +3 -1
  212. package/expo-plugin/build/types/ios-widget/files/index.d.ts.map +1 -1
  213. package/expo-plugin/build/types/ios-widget/files/infoPlist.d.ts +2 -1
  214. package/expo-plugin/build/types/ios-widget/files/infoPlist.d.ts.map +1 -1
  215. package/expo-plugin/build/types/ios-widget/files/manifest.d.ts +9 -2
  216. package/expo-plugin/build/types/ios-widget/files/manifest.d.ts.map +1 -1
  217. package/expo-plugin/build/types/ios-widget/files/swift-utils.d.ts +2 -0
  218. package/expo-plugin/build/types/ios-widget/files/swift-utils.d.ts.map +1 -0
  219. package/expo-plugin/build/types/ios-widget/files/swift.d.ts +6 -2
  220. package/expo-plugin/build/types/ios-widget/files/swift.d.ts.map +1 -1
  221. package/expo-plugin/build/types/ios-widget/index.d.ts +3 -1
  222. package/expo-plugin/build/types/ios-widget/index.d.ts.map +1 -1
  223. package/expo-plugin/build/types/ios-widget/podfile.d.ts +19 -1
  224. package/expo-plugin/build/types/ios-widget/podfile.d.ts.map +1 -1
  225. package/expo-plugin/build/types/ios-widget/widgetPlist.d.ts.map +1 -1
  226. package/expo-plugin/build/types/ios-widget/xcode/buildPhases.d.ts +6 -8
  227. package/expo-plugin/build/types/ios-widget/xcode/buildPhases.d.ts.map +1 -1
  228. package/expo-plugin/build/types/ios-widget/xcode/configurationList.d.ts +15 -10
  229. package/expo-plugin/build/types/ios-widget/xcode/configurationList.d.ts.map +1 -1
  230. package/expo-plugin/build/types/ios-widget/xcode/fileReferences.d.ts +16 -0
  231. package/expo-plugin/build/types/ios-widget/xcode/fileReferences.d.ts.map +1 -0
  232. package/expo-plugin/build/types/ios-widget/xcode/groups.d.ts +0 -4
  233. package/expo-plugin/build/types/ios-widget/xcode/groups.d.ts.map +1 -1
  234. package/expo-plugin/build/types/ios-widget/xcode/index.d.ts +23 -3
  235. package/expo-plugin/build/types/ios-widget/xcode/index.d.ts.map +1 -1
  236. package/expo-plugin/build/types/ios-widget/xcode/mainAppSettings.d.ts +16 -4
  237. package/expo-plugin/build/types/ios-widget/xcode/mainAppSettings.d.ts.map +1 -1
  238. package/expo-plugin/build/types/ios-widget/xcode/productFile.d.ts +0 -4
  239. package/expo-plugin/build/types/ios-widget/xcode/productFile.d.ts.map +1 -1
  240. package/expo-plugin/build/types/ios-widget/xcode/target.d.ts +11 -26
  241. package/expo-plugin/build/types/ios-widget/xcode/target.d.ts.map +1 -1
  242. package/expo-plugin/build/types/types.d.ts +23 -4
  243. package/expo-plugin/build/types/types.d.ts.map +1 -1
  244. package/expo-plugin/build/types/utils/urlScheme.d.ts +16 -0
  245. package/expo-plugin/build/types/utils/urlScheme.d.ts.map +1 -1
  246. package/expo-plugin/build/types/validation.d.ts +2 -1
  247. package/expo-plugin/build/types/validation.d.ts.map +1 -1
  248. package/expo-plugin/src/constants.ts +24 -1
  249. package/expo-plugin/src/index.ts +14 -1
  250. package/expo-plugin/src/ios/index.ts +3 -0
  251. package/expo-plugin/src/ios/infoPlist.ts +33 -5
  252. package/expo-plugin/src/ios/serverUpdate.ts +29 -0
  253. package/expo-plugin/src/ios-widget/clientRendered.ts +9 -5
  254. package/expo-plugin/src/ios-widget/clientRenderedPrerender.ts +11 -6
  255. package/expo-plugin/src/ios-widget/dynamic-live-activity/swift.ts +138 -0
  256. package/expo-plugin/src/ios-widget/files/index.ts +15 -4
  257. package/expo-plugin/src/ios-widget/files/infoPlist.ts +17 -3
  258. package/expo-plugin/src/ios-widget/files/manifest.ts +42 -2
  259. package/expo-plugin/src/ios-widget/files/swift-utils.ts +3 -0
  260. package/expo-plugin/src/ios-widget/files/swift.ts +69 -22
  261. package/expo-plugin/src/ios-widget/index.ts +13 -3
  262. package/expo-plugin/src/ios-widget/podfile.ts +46 -13
  263. package/expo-plugin/src/ios-widget/widgetPlist.ts +37 -23
  264. package/expo-plugin/src/ios-widget/xcode/__fixtures__/fresh.pbxproj +197 -0
  265. package/expo-plugin/src/ios-widget/xcode/__fixtures__/with-existing-extension.pbxproj +321 -0
  266. package/expo-plugin/src/ios-widget/xcode/__fixtures__/with-per-config-signing.pbxproj +203 -0
  267. package/expo-plugin/src/ios-widget/xcode/__snapshots__/applyXcodeChanges.node.test.ts.snap +363 -0
  268. package/expo-plugin/src/ios-widget/xcode/__tests__/pbxConsistency.ts +130 -0
  269. package/expo-plugin/src/ios-widget/xcode/buildPhases.ts +210 -164
  270. package/expo-plugin/src/ios-widget/xcode/configurationList.ts +52 -35
  271. package/expo-plugin/src/ios-widget/xcode/fileReferences.ts +51 -0
  272. package/expo-plugin/src/ios-widget/xcode/groups.ts +52 -54
  273. package/expo-plugin/src/ios-widget/xcode/index.ts +124 -119
  274. package/expo-plugin/src/ios-widget/xcode/mainAppSettings.ts +59 -54
  275. package/expo-plugin/src/ios-widget/xcode/productFile.ts +3 -2
  276. package/expo-plugin/src/ios-widget/xcode/target.ts +31 -83
  277. package/expo-plugin/src/types.ts +28 -4
  278. package/expo-plugin/src/utils/urlScheme.ts +47 -17
  279. package/expo-plugin/src/validation.ts +76 -1
  280. package/ios/Package.swift +39 -4
  281. package/ios/VoltraWidget.podspec +1 -0
  282. package/ios/app/NativeVoltra.mm +126 -7
  283. package/ios/app/VoltraLiveActivityManager.swift +30 -0
  284. package/ios/app/VoltraLiveActivityService.swift +77 -5
  285. package/ios/app/VoltraModule.swift +117 -1
  286. package/ios/app/VoltraModuleImpl.swift +116 -2
  287. package/ios/app/VoltraViewComponentView.mm +3 -3
  288. package/ios/app/VoltraWidgetService.swift +147 -12
  289. package/ios/app/dynamic-live-activity/VoltraDynamicLiveActivityService.swift +97 -0
  290. package/ios/app/dynamic-live-activity/VoltraLiveActivityChronology.swift +68 -0
  291. package/ios/shared/DynamicWidgetPropsCodec.swift +51 -0
  292. package/ios/shared/DynamicWidgetPropsStorage.swift +53 -0
  293. package/ios/shared/DynamicWidgetPropsStore.swift +117 -0
  294. package/ios/shared/DynamicWidgetRenderCoordinator.swift +31 -0
  295. package/ios/shared/DynamicWidgetServerUpdate/DynamicWidgetServerFetchResolver.swift +34 -0
  296. package/ios/shared/DynamicWidgetServerUpdate/DynamicWidgetServerProps.swift +55 -0
  297. package/ios/shared/DynamicWidgetServerUpdate/DynamicWidgetServerPropsStore.swift +146 -0
  298. package/ios/shared/DynamicWidgetServerUpdate/DynamicWidgetServerUpdateRunner.swift +193 -0
  299. package/ios/shared/DynamicWidgetUpdater.swift +30 -0
  300. package/ios/shared/ServerWidgetContentResolver.swift +60 -0
  301. package/ios/shared/ServerWidgetResponseStore.swift +25 -0
  302. package/ios/shared/ShortNames.swift +6 -0
  303. package/ios/shared/VoltraConfig.swift +41 -0
  304. package/ios/shared/VoltraConstants.swift +19 -0
  305. package/ios/shared/VoltraElement.swift +127 -43
  306. package/ios/shared/VoltraEventBus.swift +52 -7
  307. package/ios/shared/VoltraJSRenderer.swift +93 -23
  308. package/ios/shared/VoltraNode.swift +7 -111
  309. package/ios/shared/VoltraRefreshIntent.swift +1 -1
  310. package/ios/shared/VoltraWidgetDefaults.swift +9 -1
  311. package/ios/shared/VoltraWidgetKind.swift +41 -0
  312. package/ios/shared/VoltraWidgetServerFetcher.swift +52 -107
  313. package/ios/shared/WidgetServer/VoltraWidgetAppearance.swift +17 -0
  314. package/ios/shared/WidgetServer/VoltraWidgetServer.swift +138 -0
  315. package/ios/shared/WidgetServer/WidgetCanonicalConfiguration.swift +77 -0
  316. package/ios/shared/WidgetServer/WidgetScope.swift +55 -0
  317. package/ios/shared/WidgetServer/WidgetServerEtagStore.swift +55 -0
  318. package/ios/shared/WidgetServer/WidgetServerFetcher.swift +179 -0
  319. package/ios/shared/WidgetServer/WidgetServerRequestBuilder.swift +114 -0
  320. package/ios/shared/WidgetServer/WidgetServerSettingsCodec.swift +47 -0
  321. package/ios/shared/WidgetServer/WidgetServerSettingsResolver.swift +129 -0
  322. package/ios/shared/WidgetServer/WidgetServerSettingsStore.swift +170 -0
  323. package/ios/shared/WidgetServer/WidgetServerSettingsValidator.swift +73 -0
  324. package/ios/shared/WidgetServer/WidgetServerUpdateSettings.swift +123 -0
  325. package/ios/shared/WidgetServer/WidgetServerUpdateSettingsJson.swift +115 -0
  326. package/ios/shared/dynamic-live-activity/DynamicLiveActivityPropsCodec.swift +13 -0
  327. package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityBundleSource.swift +156 -0
  328. package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityObserver.swift +97 -0
  329. package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityOperations.swift +105 -0
  330. package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityPayloadValidator.swift +55 -0
  331. package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityRegistry.swift +143 -0
  332. package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityRenderFailureQueue.swift +158 -0
  333. package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityRenderFailureReporter.swift +120 -0
  334. package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityRenderer.swift +370 -0
  335. package/ios/shared/dynamic-live-activity/VoltraDynamicLiveActivityTypes.swift +87 -0
  336. package/ios/shared/dynamic-live-activity/VoltraLiveActivityOrder.swift +19 -0
  337. package/ios/target/VoltraClientWidgetRuntime.swift +60 -10
  338. package/ios/target/VoltraDynamicWidgetServerUpdateProvider.swift +204 -0
  339. package/ios/target/VoltraHomeWidget.swift +91 -92
  340. package/ios/target/VoltraWidget.swift +3 -1
  341. package/ios/ui/Extensions/VoltraNode+View.swift +113 -0
  342. package/ios/ui/Generated/Parameters/ChartParameters.swift +3 -0
  343. package/ios/ui/Helpers/VoltraDeepLinkResolver.swift +5 -3
  344. package/ios/ui/Helpers/VoltraProgressDriver.swift +6 -2
  345. package/ios/ui/Layout/VoltraFlexStackLayout.swift +9 -3
  346. package/ios/ui/Style/JSColorParser.swift +24 -8
  347. package/ios/ui/Style/JSGradientParser.swift +36 -12
  348. package/ios/ui/Style/JSStyleParser.swift +36 -12
  349. package/ios/ui/Style/LayoutStyle.swift +12 -4
  350. package/ios/ui/Views/VoltraChart.swift +160 -16
  351. package/ios/ui/Views/VoltraLinearGradient.swift +6 -2
  352. package/package.json +5 -5
  353. package/src/dynamic-widget/api.ts +25 -0
  354. package/src/events.ts +34 -0
  355. package/src/index.ts +23 -0
  356. package/src/live-activity/api.ts +2 -2
  357. package/src/live-activity/dynamic-api.ts +240 -0
  358. package/src/native/NativeVoltra.ts +22 -0
  359. package/src/types.ts +4 -0
  360. package/src/utils/enableDynamicLiveActivityHotReload.ts +50 -0
  361. package/src/utils/enableWidgetHotReload.ts +9 -16
  362. package/src/utils/useUpdateOnHMR.ts +3 -12
  363. package/src/widgets/server-credentials.ts +8 -0
  364. package/src/widgets/server-update.ts +84 -0
  365. /package/ios/shared/{VoltraKeychainHelper.swift → WidgetServer/VoltraKeychainHelper.swift} +0 -0
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizePath = normalizePath;
4
+ exports.normalizeRef = normalizeRef;
5
+ exports.ensureWidgetFileReference = ensureWidgetFileReference;
6
+ const pbxFile = require('xcode/lib/pbxFile');
7
+ /** Strips surrounding quotes from a pbx path/name value. */
8
+ function normalizePath(value) {
9
+ if (!value) {
10
+ return '';
11
+ }
12
+ return value.replace(/^"|"$/g, '');
13
+ }
14
+ /** Strips a trailing `/* comment *\/` and whitespace, yielding the bare UUID of a pbx reference. */
15
+ function normalizeRef(value) {
16
+ return String(value)
17
+ .replace(/\/\*.*?\*\//g, '')
18
+ .trim();
19
+ }
20
+ /**
21
+ * Resolves the PBXFileReference UUID for a widget file, scoped to the widget's own PBXGroup.
22
+ *
23
+ * pbxproj paths are group-relative, so a bare path like `Assets.xcassets` collides with any other
24
+ * extension's identically named file. Scoping the lookup to the children of the widget group
25
+ * (identified by `targetName`) keeps the widget's references distinct from those, which is what
26
+ * prevents the shared-fileRef corruption behind issues #87/#32. When the widget group does not
27
+ * exist yet, a fresh reference is created.
28
+ */
29
+ function ensureWidgetFileReference(xcodeProject, filePath, targetName) {
30
+ const file = new pbxFile(filePath);
31
+ const fileReferenceSection = xcodeProject.pbxFileReferenceSection();
32
+ const group = xcodeProject.pbxGroupByName(targetName);
33
+ if (group?.children) {
34
+ for (const child of group.children) {
35
+ const refKey = normalizeRef(child.value);
36
+ const entry = fileReferenceSection[refKey];
37
+ if (!entry) {
38
+ continue;
39
+ }
40
+ const entryPath = normalizePath(entry.path);
41
+ if (entryPath === file.path || entryPath === normalizePath(filePath)) {
42
+ return refKey;
43
+ }
44
+ }
45
+ }
46
+ file.fileRef = xcodeProject.generateUuid();
47
+ xcodeProject.addToPbxFileReferenceSection(file);
48
+ return file.fileRef;
49
+ }
50
+ //# sourceMappingURL=fileReferences.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileReferences.js","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/fileReferences.ts"],"names":[],"mappings":";;AAKA,sCAKC;AAGD,oCAIC;AAWD,8DAsBC;AAhDD,MAAM,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;AAE5C,4DAA4D;AAC5D,SAAgB,aAAa,CAAC,KAAyB;IACrD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAA;IACX,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;AACpC,CAAC;AAED,oGAAoG;AACpG,SAAgB,YAAY,CAAC,KAAc;IACzC,OAAO,MAAM,CAAC,KAAK,CAAC;SACjB,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;SAC3B,IAAI,EAAE,CAAA;AACX,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,yBAAyB,CAAC,YAA0B,EAAE,QAAgB,EAAE,UAAkB;IACxG,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAA;IAClC,MAAM,oBAAoB,GAAG,YAAY,CAAC,uBAAuB,EAAE,CAAA;IACnE,MAAM,KAAK,GAAG,YAAY,CAAC,cAAc,CAAC,UAAU,CAAC,CAAA;IAErD,IAAI,KAAK,EAAE,QAAQ,EAAE,CAAC;QACpB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YACxC,MAAM,KAAK,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAA;YAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,SAAQ;YACV,CAAC;YACD,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC3C,IAAI,SAAS,KAAK,IAAI,CAAC,IAAI,IAAI,SAAS,KAAK,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrE,OAAO,MAAM,CAAA;YACf,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,YAAY,EAAE,CAAA;IAC1C,YAAY,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAA;IAC/C,OAAO,IAAI,CAAC,OAAO,CAAA;AACrB,CAAC"}
@@ -1,47 +1,66 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.addPbxGroup = addPbxGroup;
4
3
  exports.ensurePbxGroup = ensurePbxGroup;
4
+ const fileReferences_1 = require("./fileReferences");
5
5
  const pbxFile = require('xcode/lib/pbxFile');
6
- /**
7
- * Adds a PBXGroup for the widget extension files.
8
- */
9
- function addPbxGroup(xcodeProject, options) {
10
- const { targetName, widgetFiles } = options;
6
+ function collectGroupFiles(widgetFiles) {
11
7
  const { swiftFiles, intentFiles, assetDirectories, entitlementFiles, plistFiles, localizedStringResources } = widgetFiles;
12
- // Add PBX group with all widget files
13
- const { uuid: pbxGroupUuid } = xcodeProject.addPbxGroup([
8
+ return [
14
9
  ...swiftFiles,
15
10
  ...intentFiles,
16
11
  ...entitlementFiles,
17
12
  ...plistFiles,
18
13
  ...assetDirectories,
19
14
  ...localizedStringResources,
20
- ], targetName, targetName);
21
- // Add PBXGroup to top level group
15
+ ];
16
+ }
17
+ /**
18
+ * Adds a PBXGroup for the widget extension files.
19
+ *
20
+ * Constructs the PBXGroup and its PBXFileReference children by hand rather than delegating to
21
+ * `xcodeProject.addPbxGroup`, because that helper also creates a PBXBuildFile per file as a side
22
+ * effect. Those extra build files collide with the ones managed by the build-phase functions and
23
+ * produce the "no parent for object" consistency errors from issues #87/#32. File references are
24
+ * resolved through the widget-scoped {@link ensureWidgetFileReference} so they are shared with the
25
+ * build phases instead of duplicated.
26
+ *
27
+ * Internal create-only fallback for {@link ensurePbxGroup}; not part of the public pipeline.
28
+ */
29
+ function addPbxGroup(xcodeProject, options) {
30
+ const { targetName, widgetFiles } = options;
31
+ const allFiles = collectGroupFiles(widgetFiles);
32
+ const pbxGroupUuid = xcodeProject.generateUuid();
33
+ const pbxGroup = {
34
+ isa: 'PBXGroup',
35
+ children: [],
36
+ name: targetName,
37
+ path: targetName,
38
+ sourceTree: '"<group>"',
39
+ };
22
40
  const groups = xcodeProject.hash.project.objects['PBXGroup'];
23
- if (pbxGroupUuid) {
24
- Object.keys(groups).forEach(function (key) {
25
- if (groups[key].name === undefined && groups[key].path === undefined) {
26
- xcodeProject.addToPbxGroup(pbxGroupUuid, key);
27
- }
28
- });
41
+ groups[pbxGroupUuid] = pbxGroup;
42
+ groups[`${pbxGroupUuid}_comment`] = targetName;
43
+ for (const filePath of allFiles) {
44
+ const file = new pbxFile(filePath);
45
+ const fileRef = (0, fileReferences_1.ensureWidgetFileReference)(xcodeProject, filePath, targetName);
46
+ pbxGroup.children.push({ value: fileRef, comment: file.basename });
29
47
  }
48
+ // Attach the new group to the top-level (unnamed, path-less) group.
49
+ Object.keys(groups).forEach(function (key) {
50
+ if (/_comment$/.test(key)) {
51
+ return;
52
+ }
53
+ if (groups[key].name === undefined && groups[key].path === undefined) {
54
+ xcodeProject.addToPbxGroup(pbxGroupUuid, key);
55
+ }
56
+ });
30
57
  }
31
58
  /**
32
59
  * Ensures a PBXGroup exists for the widget extension files.
33
60
  */
34
61
  function ensurePbxGroup(xcodeProject, options) {
35
62
  const { targetName, widgetFiles } = options;
36
- const { swiftFiles, intentFiles, assetDirectories, entitlementFiles, plistFiles, localizedStringResources } = widgetFiles;
37
- const allFiles = [
38
- ...swiftFiles,
39
- ...intentFiles,
40
- ...entitlementFiles,
41
- ...plistFiles,
42
- ...assetDirectories,
43
- ...localizedStringResources,
44
- ];
63
+ const allFiles = collectGroupFiles(widgetFiles);
45
64
  const existingGroup = xcodeProject.pbxGroupByName(targetName);
46
65
  if (!existingGroup) {
47
66
  addPbxGroup(xcodeProject, options);
@@ -52,28 +71,11 @@ function ensurePbxGroup(xcodeProject, options) {
52
71
  }
53
72
  for (const filePath of allFiles) {
54
73
  const file = new pbxFile(filePath);
55
- const fileRef = ensureFileReference(xcodeProject, filePath);
74
+ const fileRef = (0, fileReferences_1.ensureWidgetFileReference)(xcodeProject, filePath, targetName);
56
75
  const alreadyInGroup = existingGroup.children.some((child) => child.value === fileRef || child.comment === file.basename);
57
76
  if (!alreadyInGroup) {
58
77
  existingGroup.children.push({ value: fileRef, comment: file.basename });
59
78
  }
60
79
  }
61
80
  }
62
- function ensureFileReference(xcodeProject, filePath) {
63
- const fileReferenceSection = xcodeProject.pbxFileReferenceSection();
64
- const file = new pbxFile(filePath);
65
- for (const key of Object.keys(fileReferenceSection)) {
66
- if (/_comment$/.test(key)) {
67
- continue;
68
- }
69
- const entry = fileReferenceSection[key];
70
- const entryPath = typeof entry?.path === 'string' ? entry.path.replace(/^"|"$/g, '') : '';
71
- if (entryPath === file.path || entryPath === filePath) {
72
- return key;
73
- }
74
- }
75
- file.fileRef = xcodeProject.generateUuid();
76
- xcodeProject.addToPbxFileReferenceSection(file);
77
- return file.fileRef;
78
- }
79
81
  //# sourceMappingURL=groups.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"groups.js","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/groups.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"groups.js","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/groups.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,7 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.configureXcodeProject = void 0;
37
+ exports.applyXcodeChanges = applyXcodeChanges;
37
38
  const config_plugins_1 = require("@expo/config-plugins");
38
39
  const path = __importStar(require("path"));
39
40
  const fileDiscovery_1 = require("../../utils/fileDiscovery");
@@ -44,6 +45,93 @@ const groups_1 = require("./groups");
44
45
  const mainAppSettings_1 = require("./mainAppSettings");
45
46
  const productFile_1 = require("./productFile");
46
47
  const target_1 = require("./target");
48
+ /**
49
+ * Applies all widget-extension changes to an already-parsed Xcode project.
50
+ *
51
+ * This is the pure core of {@link configureXcodeProject}: it takes the parsed project, the plugin
52
+ * props, the discovered widget files, and whether any widget is client-rendered, then mutates the
53
+ * project in place. It performs no filesystem or `modRequest` access, which makes it directly
54
+ * testable against pbxproj fixtures.
55
+ *
56
+ * When the widget target does not exist yet, the minimal native-target skeleton is created first
57
+ * (targets cannot be "ensured" into existence); every other object is then reconciled by the same
58
+ * idempotent ensure pipeline that runs for an already-existing target.
59
+ */
60
+ function applyXcodeChanges(xcodeProject, props, widgetFiles, hasClientRenderedWidgets = false) {
61
+ const { targetName, bundleIdentifier, deploymentTarget, version, buildNumber } = props;
62
+ const groupName = 'Embed Foundation Extensions';
63
+ const mainTargetUuid = xcodeProject.getFirstTarget().uuid;
64
+ // The catalog is compiled into the app even for a legacy-only configuration.
65
+ // Keep it in the extension group too so both targets share one PBX file reference.
66
+ const effectiveWidgetFiles = {
67
+ ...widgetFiles,
68
+ swiftFiles: Array.from(new Set([...widgetFiles.swiftFiles, 'VoltraDynamicLiveActivityTypes.swift'])),
69
+ };
70
+ // Read main app target settings to synchronize code signing (per configuration).
71
+ const mainAppSettings = (0, mainAppSettings_1.getMainAppTargetSettings)(xcodeProject);
72
+ // Use the deploymentTarget from plugin config (or default), ignore main app's deployment target.
73
+ // This allows the widget extension to have its own deployment target independent of the main app.
74
+ // Resolve (or create) the widget target. A target cannot be reconciled into existence, so the
75
+ // absent case creates the minimal skeleton; from here on both paths share one pipeline.
76
+ let targetUuid = xcodeProject.findTargetKey(targetName);
77
+ if (!targetUuid) {
78
+ targetUuid = xcodeProject.generateUuid();
79
+ (0, target_1.createTargetSkeleton)(xcodeProject, { targetName, targetUuid });
80
+ }
81
+ const target = xcodeProject.pbxNativeTargetSection()[targetUuid];
82
+ // Ensure the configuration list is present and its settings are in sync.
83
+ const xCConfigurationList = (0, configurationList_1.ensureXCConfigurationList)(xcodeProject, {
84
+ targetName,
85
+ bundleIdentifier,
86
+ deploymentTarget,
87
+ version,
88
+ buildNumber,
89
+ mainAppSettings,
90
+ }, target.buildConfigurationList);
91
+ // Ensure the product file (.appex) exists.
92
+ const productFile = (0, productFile_1.ensureProductFile)(xcodeProject, {
93
+ targetName,
94
+ groupName,
95
+ });
96
+ // Point the target at the reconciled configuration list and product file.
97
+ target.productReference = productFile.fileRef;
98
+ target.buildConfigurationList = xCConfigurationList.uuid;
99
+ target.productType = `"com.apple.product-type.app-extension"`;
100
+ target.name = targetName;
101
+ target.productName = targetName;
102
+ if (!target.buildPhases) {
103
+ target.buildPhases = [];
104
+ }
105
+ // Ensure the group first so the widget's file references exist before the build phases
106
+ // reference them (the phases resolve files through the widget-scoped group).
107
+ (0, groups_1.ensurePbxGroup)(xcodeProject, {
108
+ targetName,
109
+ widgetFiles: effectiveWidgetFiles,
110
+ });
111
+ // Ensure build phases and their files.
112
+ (0, buildPhases_1.ensureBuildPhases)(xcodeProject, {
113
+ targetUuid,
114
+ targetName,
115
+ groupName,
116
+ productFile,
117
+ widgetFiles: effectiveWidgetFiles,
118
+ mainTargetUuid: xcodeProject.getFirstTarget().uuid,
119
+ // The app-side lifecycle service always compiles against the generated catalog.
120
+ // An empty catalog keeps legacy-only apps source-compatible.
121
+ mainSwiftFiles: ['VoltraDynamicLiveActivityTypes.swift'],
122
+ });
123
+ if (hasClientRenderedWidgets || (props.liveActivities?.length ?? 0) > 0) {
124
+ (0, buildPhases_1.ensureWidgetBundleScriptPhase)(xcodeProject, targetUuid);
125
+ }
126
+ if ((props.liveActivities?.length ?? 0) > 0) {
127
+ // Local Dynamic Live Activity starts preflight the baked definition from
128
+ // the app process, while WidgetKit renders from the extension process.
129
+ // Bake the same manifest into both products.
130
+ (0, buildPhases_1.ensureWidgetBundleScriptPhase)(xcodeProject, mainTargetUuid, 'live-activities');
131
+ }
132
+ (0, target_1.ensureTargetAttributes)(xcodeProject, targetUuid);
133
+ (0, target_1.ensureTargetDependency)(xcodeProject, targetUuid);
134
+ }
47
135
  /**
48
136
  * Plugin step that configures the Xcode project for the widget extension.
49
137
  *
@@ -54,111 +142,25 @@ const target_1 = require("./target");
54
142
  * - Adds build phases (Sources, CopyFiles, Frameworks, Resources)
55
143
  * - Adds PBXGroup for widget files
56
144
  *
57
- * This should run after generateWidgetExtensionFiles so the files exist.
145
+ * This should run after generateWidgetExtensionFiles so the files exist. The wrapper is kept thin:
146
+ * it discovers widget files and detects client-rendered widgets, then delegates the actual pbxproj
147
+ * mutation to {@link applyXcodeChanges}.
58
148
  */
59
149
  const configureXcodeProject = (config, props) => {
60
- const { targetName, bundleIdentifier, deploymentTarget, widgets } = props;
150
+ const { targetName, widgets, liveActivities } = props;
61
151
  return (0, config_plugins_1.withXcodeProject)(config, (config) => {
62
152
  if (config.modRequest.introspect) {
63
153
  return config;
64
154
  }
65
155
  const xcodeProject = config.modResults;
66
- const groupName = 'Embed Foundation Extensions';
67
156
  // The release widget-bundling phase is only needed when a widget is a Dynamic Widget (server
68
157
  // widgets carry no JS bundle). Detect once so both the create and update paths agree.
69
158
  const hasClientRenderedWidgets = !!widgets &&
70
159
  (0, clientRendered_1.detectClientRenderedWidgets)(widgets, config.modRequest.projectRoot).some((widget) => widget.clientRendered);
71
- // Check if target already exists
72
- const nativeTargets = xcodeProject.pbxNativeTargetSection();
73
- const existingTargetKey = xcodeProject.findTargetKey(targetName);
74
- const existingTarget = existingTargetKey ? nativeTargets[existingTargetKey] : null;
75
160
  const { platformProjectRoot } = config.modRequest;
76
161
  const targetPath = path.join(platformProjectRoot, targetName);
77
162
  const widgetFiles = (0, fileDiscovery_1.getIOSWidgetExtensionFiles)(targetPath, targetName);
78
- // Read main app target settings to synchronize code signing
79
- const mainAppSettings = (0, mainAppSettings_1.getMainAppTargetSettings)(xcodeProject);
80
- // Use the deploymentTarget from plugin config (or default), ignore main app's deployment target
81
- // This allows the widget extension to have its own deployment target independent of the main app
82
- if (existingTarget && existingTargetKey) {
83
- // Ensure configuration list is up to date
84
- const xCConfigurationList = (0, configurationList_1.ensureXCConfigurationList)(xcodeProject, {
85
- targetName,
86
- bundleIdentifier,
87
- deploymentTarget,
88
- codeSignStyle: mainAppSettings?.codeSignStyle,
89
- developmentTeam: mainAppSettings?.developmentTeam,
90
- provisioningProfileSpecifier: mainAppSettings?.provisioningProfileSpecifier,
91
- }, existingTarget.buildConfigurationList);
92
- // Ensure product file exists
93
- const productFile = (0, productFile_1.ensureProductFile)(xcodeProject, {
94
- targetName,
95
- groupName,
96
- });
97
- // Update target references
98
- existingTarget.productReference = productFile.fileRef;
99
- existingTarget.buildConfigurationList = xCConfigurationList.uuid;
100
- existingTarget.productType = `"com.apple.product-type.app-extension"`;
101
- existingTarget.name = targetName;
102
- existingTarget.productName = targetName;
103
- if (!existingTarget.buildPhases) {
104
- existingTarget.buildPhases = [];
105
- }
106
- // Ensure build phases and groups
107
- (0, buildPhases_1.ensureBuildPhases)(xcodeProject, {
108
- targetUuid: existingTargetKey,
109
- groupName,
110
- productFile,
111
- widgetFiles,
112
- mainTargetUuid: xcodeProject.getFirstTarget().uuid,
113
- });
114
- if (hasClientRenderedWidgets) {
115
- (0, buildPhases_1.ensureWidgetBundleScriptPhase)(xcodeProject, existingTargetKey);
116
- }
117
- (0, groups_1.ensurePbxGroup)(xcodeProject, {
118
- targetName,
119
- widgetFiles,
120
- });
121
- (0, target_1.ensureTargetAttributes)(xcodeProject, existingTargetKey);
122
- (0, target_1.ensureTargetDependency)(xcodeProject, existingTargetKey);
123
- return config;
124
- }
125
- // Add configuration list
126
- const targetUuid = xcodeProject.generateUuid();
127
- const xCConfigurationList = (0, configurationList_1.addXCConfigurationList)(xcodeProject, {
128
- targetName,
129
- bundleIdentifier,
130
- deploymentTarget,
131
- codeSignStyle: mainAppSettings?.codeSignStyle,
132
- developmentTeam: mainAppSettings?.developmentTeam,
133
- provisioningProfileSpecifier: mainAppSettings?.provisioningProfileSpecifier,
134
- });
135
- // Add product file
136
- const productFile = (0, productFile_1.addProductFile)(xcodeProject, {
137
- targetName,
138
- groupName,
139
- });
140
- // Configure target (native target, project section, dependency)
141
- (0, target_1.configureTarget)(xcodeProject, {
142
- targetName,
143
- targetUuid,
144
- productFile,
145
- xCConfigurationList,
146
- });
147
- // Add build phases
148
- (0, buildPhases_1.addBuildPhases)(xcodeProject, {
149
- targetUuid,
150
- groupName,
151
- productFile,
152
- widgetFiles,
153
- });
154
- if (hasClientRenderedWidgets) {
155
- (0, buildPhases_1.ensureWidgetBundleScriptPhase)(xcodeProject, targetUuid);
156
- }
157
- // Add PBX group
158
- (0, groups_1.addPbxGroup)(xcodeProject, {
159
- targetName,
160
- widgetFiles,
161
- });
163
+ applyXcodeChanges(xcodeProject, props, widgetFiles, hasClientRenderedWidgets || (liveActivities?.length ?? 0) > 0);
162
164
  return config;
163
165
  });
164
166
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAAqE;AACrE,2CAA4B;AAG5B,6DAAsE;AACtE,sDAA+D;AAC/D,+CAAgG;AAChG,2DAAuF;AACvF,qCAAsD;AACtD,uDAA4D;AAC5D,+CAAiE;AACjE,qCAA0F;AAS1F;;;;;;;;;;;GAWG;AACI,MAAM,qBAAqB,GAA6C,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;IAC/F,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;IAEzE,OAAO,IAAA,iCAAgB,EAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;QACzC,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;YACjC,OAAO,MAAM,CAAA;QACf,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAA;QACtC,MAAM,SAAS,GAAG,6BAA6B,CAAA;QAE/C,6FAA6F;QAC7F,sFAAsF;QACtF,MAAM,wBAAwB,GAC5B,CAAC,CAAC,OAAO;YACT,IAAA,4CAA2B,EAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;QAE7G,iCAAiC;QACjC,MAAM,aAAa,GAAG,YAAY,CAAC,sBAAsB,EAAE,CAAA;QAC3D,MAAM,iBAAiB,GAAG,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;QAChE,MAAM,cAAc,GAAG,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAElF,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAAC,UAAU,CAAA;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAA;QAC7D,MAAM,WAAW,GAAG,IAAA,0CAA0B,EAAC,UAAU,EAAE,UAAU,CAAC,CAAA;QAEtE,4DAA4D;QAC5D,MAAM,eAAe,GAAG,IAAA,0CAAwB,EAAC,YAAY,CAAC,CAAA;QAE9D,gGAAgG;QAChG,iGAAiG;QAEjG,IAAI,cAAc,IAAI,iBAAiB,EAAE,CAAC;YACxC,0CAA0C;YAC1C,MAAM,mBAAmB,GAAG,IAAA,6CAAyB,EACnD,YAAY,EACZ;gBACE,UAAU;gBACV,gBAAgB;gBAChB,gBAAgB;gBAChB,aAAa,EAAE,eAAe,EAAE,aAAa;gBAC7C,eAAe,EAAE,eAAe,EAAE,eAAe;gBACjD,4BAA4B,EAAE,eAAe,EAAE,4BAA4B;aAC5E,EACD,cAAc,CAAC,sBAAsB,CACtC,CAAA;YAED,6BAA6B;YAC7B,MAAM,WAAW,GAAG,IAAA,+BAAiB,EAAC,YAAY,EAAE;gBAClD,UAAU;gBACV,SAAS;aACV,CAAC,CAAA;YAEF,2BAA2B;YAC3B,cAAc,CAAC,gBAAgB,GAAG,WAAW,CAAC,OAAO,CAAA;YACrD,cAAc,CAAC,sBAAsB,GAAG,mBAAmB,CAAC,IAAI,CAAA;YAChE,cAAc,CAAC,WAAW,GAAG,wCAAwC,CAAA;YACrE,cAAc,CAAC,IAAI,GAAG,UAAU,CAAA;YAChC,cAAc,CAAC,WAAW,GAAG,UAAU,CAAA;YACvC,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;gBAChC,cAAc,CAAC,WAAW,GAAG,EAAE,CAAA;YACjC,CAAC;YAED,iCAAiC;YACjC,IAAA,+BAAiB,EAAC,YAAY,EAAE;gBAC9B,UAAU,EAAE,iBAAiB;gBAC7B,SAAS;gBACT,WAAW;gBACX,WAAW;gBACX,cAAc,EAAE,YAAY,CAAC,cAAc,EAAE,CAAC,IAAI;aACnD,CAAC,CAAA;YAEF,IAAI,wBAAwB,EAAE,CAAC;gBAC7B,IAAA,2CAA6B,EAAC,YAAY,EAAE,iBAAiB,CAAC,CAAA;YAChE,CAAC;YAED,IAAA,uBAAc,EAAC,YAAY,EAAE;gBAC3B,UAAU;gBACV,WAAW;aACZ,CAAC,CAAA;YAEF,IAAA,+BAAsB,EAAC,YAAY,EAAE,iBAAiB,CAAC,CAAA;YACvD,IAAA,+BAAsB,EAAC,YAAY,EAAE,iBAAiB,CAAC,CAAA;YAEvD,OAAO,MAAM,CAAA;QACf,CAAC;QAED,yBAAyB;QACzB,MAAM,UAAU,GAAG,YAAY,CAAC,YAAY,EAAE,CAAA;QAE9C,MAAM,mBAAmB,GAAG,IAAA,0CAAsB,EAAC,YAAY,EAAE;YAC/D,UAAU;YACV,gBAAgB;YAChB,gBAAgB;YAChB,aAAa,EAAE,eAAe,EAAE,aAAa;YAC7C,eAAe,EAAE,eAAe,EAAE,eAAe;YACjD,4BAA4B,EAAE,eAAe,EAAE,4BAA4B;SAC5E,CAAC,CAAA;QAEF,mBAAmB;QACnB,MAAM,WAAW,GAAG,IAAA,4BAAc,EAAC,YAAY,EAAE;YAC/C,UAAU;YACV,SAAS;SACV,CAAC,CAAA;QAEF,gEAAgE;QAChE,IAAA,wBAAe,EAAC,YAAY,EAAE;YAC5B,UAAU;YACV,UAAU;YACV,WAAW;YACX,mBAAmB;SACpB,CAAC,CAAA;QAEF,mBAAmB;QACnB,IAAA,4BAAc,EAAC,YAAY,EAAE;YAC3B,UAAU;YACV,SAAS;YACT,WAAW;YACX,WAAW;SACZ,CAAC,CAAA;QAEF,IAAI,wBAAwB,EAAE,CAAC;YAC7B,IAAA,2CAA6B,EAAC,YAAY,EAAE,UAAU,CAAC,CAAA;QACzD,CAAC;QAED,gBAAgB;QAChB,IAAA,oBAAW,EAAC,YAAY,EAAE;YACxB,UAAU;YACV,WAAW;SACZ,CAAC,CAAA;QAEF,OAAO,MAAM,CAAA;IACf,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AArIY,QAAA,qBAAqB,yBAqIjC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/index.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,28 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getMainAppTargetSettings = getMainAppTargetSettings;
4
+ /** Strips surrounding quotes from a raw build-setting value. */
5
+ function unquote(value) {
6
+ if (typeof value !== 'string') {
7
+ return undefined;
8
+ }
9
+ return value.replace(/^"|"$/g, '');
10
+ }
11
+ /** Reads the signing-related build settings from a single XCBuildConfiguration. */
12
+ function readSigningSettings(buildSettings) {
13
+ return {
14
+ codeSignStyle: unquote(buildSettings.CODE_SIGN_STYLE),
15
+ developmentTeam: unquote(buildSettings.DEVELOPMENT_TEAM),
16
+ provisioningProfileSpecifier: unquote(buildSettings.PROVISIONING_PROFILE_SPECIFIER),
17
+ };
18
+ }
4
19
  /**
5
- * Reads build settings from the main app target to synchronize code signing with the widget extension.
20
+ * Reads code-signing build settings from every build configuration of the main app target, so the
21
+ * widget extension can synchronize signing per configuration (Debug→Debug, Release→Release).
6
22
  *
7
23
  * @param xcodeProject The Xcode project instance
8
- * @returns The main app target's build settings, or null if not found
24
+ * @returns Signing settings keyed by configuration name plus a first-configuration fallback, or
25
+ * null when the main app target or its configurations cannot be resolved
9
26
  */
10
27
  function getMainAppTargetSettings(xcodeProject) {
11
28
  try {
@@ -13,7 +30,6 @@ function getMainAppTargetSettings(xcodeProject) {
13
30
  if (!mainAppTarget) {
14
31
  return null;
15
32
  }
16
- // Get the build configuration list for the main app target
17
33
  const buildConfigurationListId = mainAppTarget.buildConfigurationList;
18
34
  if (!buildConfigurationListId) {
19
35
  return null;
@@ -21,47 +37,33 @@ function getMainAppTargetSettings(xcodeProject) {
21
37
  // Extract UUID from buildConfigurationListId (it might include a comment like "UUID /* comment */")
22
38
  const buildConfigurationListUuid = buildConfigurationListId.split(' ')[0];
23
39
  const buildConfigurationList = xcodeProject.hash.project.objects['XCConfigurationList']?.[buildConfigurationListUuid];
24
- if (!buildConfigurationList || !buildConfigurationList.buildConfigurations) {
25
- return null;
26
- }
27
- // Get the first build configuration (usually Debug) to read settings
28
- const firstConfigRef = buildConfigurationList.buildConfigurations[0];
29
- if (!firstConfigRef) {
30
- return null;
31
- }
32
- // Extract UUID from config reference (it might include a comment)
33
- const firstConfigUuid = typeof firstConfigRef === 'string' ? firstConfigRef.split(' ')[0] : firstConfigRef.value?.split(' ')[0];
34
- if (!firstConfigUuid) {
40
+ if (!buildConfigurationList?.buildConfigurations) {
35
41
  return null;
36
42
  }
37
- const buildConfiguration = xcodeProject.hash.project.objects['XCBuildConfiguration']?.[firstConfigUuid];
38
- if (!buildConfiguration || !buildConfiguration.buildSettings) {
39
- return null;
43
+ const buildConfigurationSection = xcodeProject.hash.project.objects['XCBuildConfiguration'] ?? {};
44
+ const byConfigurationName = {};
45
+ let fallback = null;
46
+ for (const configRef of buildConfigurationList.buildConfigurations) {
47
+ // Extract UUID from the config reference (it might include a comment)
48
+ const configUuid = typeof configRef === 'string' ? configRef.split(' ')[0] : configRef.value?.split(' ')[0];
49
+ if (!configUuid) {
50
+ continue;
51
+ }
52
+ const buildConfiguration = buildConfigurationSection[configUuid];
53
+ if (!buildConfiguration?.buildSettings) {
54
+ continue;
55
+ }
56
+ const settings = readSigningSettings(buildConfiguration.buildSettings);
57
+ const configName = unquote(buildConfiguration.name);
58
+ if (configName && !(configName in byConfigurationName)) {
59
+ byConfigurationName[configName] = settings;
60
+ }
61
+ fallback = fallback ?? settings;
40
62
  }
41
- const buildSettings = buildConfiguration.buildSettings;
42
- // Extract deployment target (remove quotes if present)
43
- const deploymentTarget = buildSettings.IPHONEOS_DEPLOYMENT_TARGET?.replace(/^"|"$/g, '') ||
44
- buildSettings['IPHONEOS_DEPLOYMENT_TARGET']?.replace(/^"|"$/g, '') ||
45
- null;
46
- // Extract code signing settings
47
- const codeSignStyle = buildSettings.CODE_SIGN_STYLE?.replace(/^"|"$/g, '') ||
48
- buildSettings['CODE_SIGN_STYLE']?.replace(/^"|"$/g, '') ||
49
- null;
50
- const developmentTeam = buildSettings.DEVELOPMENT_TEAM?.replace(/^"|"$/g, '') ||
51
- buildSettings['DEVELOPMENT_TEAM']?.replace(/^"|"$/g, '') ||
52
- null;
53
- const provisioningProfileSpecifier = buildSettings.PROVISIONING_PROFILE_SPECIFIER?.replace(/^"|"$/g, '') ||
54
- buildSettings['PROVISIONING_PROFILE_SPECIFIER']?.replace(/^"|"$/g, '') ||
55
- null;
56
- if (!deploymentTarget) {
63
+ if (!fallback) {
57
64
  return null;
58
65
  }
59
- return {
60
- deploymentTarget,
61
- codeSignStyle: codeSignStyle || undefined,
62
- developmentTeam: developmentTeam || undefined,
63
- provisioningProfileSpecifier: provisioningProfileSpecifier || undefined,
64
- };
66
+ return { byConfigurationName, fallback };
65
67
  }
66
68
  catch {
67
69
  // If we can't read the settings, return null and use fallback values
@@ -1 +1 @@
1
- {"version":3,"file":"mainAppSettings.js","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/mainAppSettings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mainAppSettings.js","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/mainAppSettings.ts"],"names":[],"mappings":";;AA6CA,4DAsDC;AA/ED,gEAAgE;AAChE,SAAS,OAAO,CAAC,KAAc;IAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;AACpC,CAAC;AAED,mFAAmF;AACnF,SAAS,mBAAmB,CAAC,aAAsC;IACjE,OAAO;QACL,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC;QACrD,eAAe,EAAE,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC;QACxD,4BAA4B,EAAE,OAAO,CAAC,aAAa,CAAC,8BAA8B,CAAC;KACpF,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,wBAAwB,CAAC,YAA0B;IACjE,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,YAAY,CAAC,cAAc,EAAE,EAAE,WAAW,CAAA;QAChE,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,wBAAwB,GAAG,aAAa,CAAC,sBAAsB,CAAA;QACrE,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAA;QACb,CAAC;QAED,oGAAoG;QACpG,MAAM,0BAA0B,GAAG,wBAAwB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QAEzE,MAAM,sBAAsB,GAC1B,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAA;QACxF,IAAI,CAAC,sBAAsB,EAAE,mBAAmB,EAAE,CAAC;YACjD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,yBAAyB,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAA;QACjG,MAAM,mBAAmB,GAA2C,EAAE,CAAA;QACtE,IAAI,QAAQ,GAAkC,IAAI,CAAA;QAElD,KAAK,MAAM,SAAS,IAAI,sBAAsB,CAAC,mBAAmB,EAAE,CAAC;YACnE,sEAAsE;YACtE,MAAM,UAAU,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YAC3G,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,SAAQ;YACV,CAAC;YAED,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAA;YAChE,IAAI,CAAC,kBAAkB,EAAE,aAAa,EAAE,CAAC;gBACvC,SAAQ;YACV,CAAC;YAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAA;YACtE,MAAM,UAAU,GAAG,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA;YACnD,IAAI,UAAU,IAAI,CAAC,CAAC,UAAU,IAAI,mBAAmB,CAAC,EAAE,CAAC;gBACvD,mBAAmB,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAA;YAC5C,CAAC;YACD,QAAQ,GAAG,QAAQ,IAAI,QAAQ,CAAA;QACjC,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAA;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,qEAAqE;QACrE,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.addProductFile = addProductFile;
4
3
  exports.ensureProductFile = ensureProductFile;
5
4
  function findProductFileReference(xcodeProject, targetName) {
6
5
  const fileReferenceSection = xcodeProject.pbxFileReferenceSection();
@@ -32,7 +31,8 @@ function findBuildFileForFileRef(xcodeProject, fileRef) {
32
31
  return null;
33
32
  }
34
33
  /**
35
- * Adds the product file (.appex) for the widget extension.
34
+ * Adds the product file (.appex) for the widget extension. Internal create-only fallback for
35
+ * {@link ensureProductFile}; not part of the public pipeline.
36
36
  */
37
37
  function addProductFile(xcodeProject, options) {
38
38
  const { targetName, groupName } = options;
@@ -1 +1 @@
1
- {"version":3,"file":"productFile.js","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/productFile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"productFile.js","sourceRoot":"","sources":["../../../../src/ios-widget/xcode/productFile.ts"],"names":[],"mappings":";;AAsEA,8CAqBC;AApFD,SAAS,wBAAwB,CAAC,YAA0B,EAAE,UAAkB;IAC9E,MAAM,oBAAoB,GAAG,YAAY,CAAC,uBAAuB,EAAE,CAAA;IACnE,MAAM,iBAAiB,GAAG,GAAG,UAAU,QAAQ,CAAA;IAE/C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACpD,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,SAAQ;QACV,CAAC;QACD,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAA;QACvC,MAAM,IAAI,GAAG,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACpF,MAAM,IAAI,GAAG,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAEpF,IAAI,IAAI,KAAK,iBAAiB,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC7D,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAA;QACzB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,uBAAuB,CAAC,YAA0B,EAAE,OAAe;IAC1E,MAAM,gBAAgB,GAAG,YAAY,CAAC,mBAAmB,EAAE,CAAA;IAE3D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAChD,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,SAAQ;QACV,CAAC;QACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,KAAK,EAAE,OAAO,KAAK,OAAO,EAAE,CAAC;YAC/B,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAA;QACtB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,YAA0B,EAAE,OAA8B;IAChF,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IAEzC,MAAM,kBAAkB,GAAG;QACzB,QAAQ,EAAE,GAAG,UAAU,QAAQ;QAC/B,KAAK,EAAE,SAAS;QAChB,gBAAgB,EAAE,uBAAuB;QACzC,QAAQ,EAAE;YACR,UAAU,EAAE,CAAC,qBAAqB,CAAC;SACpC;QACD,cAAc,EAAE,CAAC;QACjB,IAAI,EAAE,GAAG,UAAU,QAAQ;QAC3B,UAAU,EAAE,oBAAoB;KACjC,CAAA;IAED,MAAM,WAAW,GAAG,YAAY,CAAC,cAAc,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAA;IAE/E,OAAO,WAAW,CAAA;AACpB,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,YAA0B,EAAE,OAA8B;IAC1F,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IACzC,MAAM,YAAY,GAAG,wBAAwB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;IAEvE,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAC9C,CAAC;IAED,MAAM,SAAS,GAAG,uBAAuB,CAAC,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;IAC7E,MAAM,WAAW,GAAG;QAClB,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,YAAY,CAAC,YAAY,EAAE;QACpD,OAAO,EAAE,YAAY,CAAC,OAAO;QAC7B,QAAQ,EAAE,GAAG,UAAU,QAAQ;QAC/B,KAAK,EAAE,SAAS;KACjB,CAAA;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,YAAY,CAAC,wBAAwB,CAAC,WAAkB,CAAC,CAAA;IAC3D,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC"}