@blotch/angular-lynx-native 0.0.0-stage → 22.2.3

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 (80) hide show
  1. package/README.md +44 -2
  2. package/dist/android/build.d.ts +28 -0
  3. package/dist/android/build.d.ts.map +1 -0
  4. package/dist/android/build.js +100 -0
  5. package/dist/android/project.d.ts +20 -0
  6. package/dist/android/project.d.ts.map +1 -0
  7. package/dist/android/project.js +84 -0
  8. package/dist/eject.d.ts +18 -0
  9. package/dist/eject.d.ts.map +1 -0
  10. package/dist/eject.js +68 -0
  11. package/dist/generate.d.ts +60 -0
  12. package/dist/generate.d.ts.map +1 -0
  13. package/dist/generate.js +111 -0
  14. package/dist/index.d.ts +41 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +72 -0
  17. package/dist/ios/build.d.ts +32 -0
  18. package/dist/ios/build.d.ts.map +1 -0
  19. package/dist/ios/build.js +149 -0
  20. package/dist/ios/frameworks.d.ts +38 -0
  21. package/dist/ios/frameworks.d.ts.map +1 -0
  22. package/dist/ios/frameworks.js +109 -0
  23. package/dist/ios/project.d.ts +11 -0
  24. package/dist/ios/project.d.ts.map +1 -0
  25. package/dist/ios/project.js +73 -0
  26. package/dist/options.d.ts +95 -0
  27. package/dist/options.d.ts.map +1 -0
  28. package/dist/options.js +112 -0
  29. package/dist/permissions.d.ts +17 -0
  30. package/dist/permissions.d.ts.map +1 -0
  31. package/dist/permissions.js +38 -0
  32. package/dist/png.d.ts +10 -0
  33. package/dist/png.d.ts.map +1 -0
  34. package/dist/png.js +24 -0
  35. package/dist/process.d.ts +17 -0
  36. package/dist/process.d.ts.map +1 -0
  37. package/dist/process.js +67 -0
  38. package/dist/xml.d.ts +10 -0
  39. package/dist/xml.d.ts.map +1 -0
  40. package/dist/xml.js +32 -0
  41. package/package.json +59 -4
  42. package/templates/android/README.md +44 -0
  43. package/templates/android/angular-lynx.properties +7 -0
  44. package/templates/android/app/build.gradle.kts +158 -0
  45. package/templates/android/app/proguard-rules.pro +65 -0
  46. package/templates/android/app/src/main/AndroidManifest.xml +37 -0
  47. package/templates/android/app/src/main/assets/.gitkeep +0 -0
  48. package/templates/android/app/src/main/java/dev/angularlynx/shell/BundleAssets.kt +45 -0
  49. package/templates/android/app/src/main/java/dev/angularlynx/shell/MainActivity.kt +156 -0
  50. package/templates/android/app/src/main/java/dev/angularlynx/shell/ResourceFetchers.kt +115 -0
  51. package/templates/android/app/src/main/java/dev/angularlynx/shell/ShellApplication.kt +39 -0
  52. package/templates/android/app/src/main/java/dev/angularlynx/shell/ShellModule.kt +40 -0
  53. package/templates/android/app/src/main/res/drawable/ic_launcher_background.xml +4 -0
  54. package/templates/android/app/src/main/res/drawable/ic_launcher_foreground.xml +10 -0
  55. package/templates/android/app/src/main/res/mipmap/ic_launcher.xml +6 -0
  56. package/templates/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +6 -0
  57. package/templates/android/app/src/main/res/values/themes.xml +13 -0
  58. package/templates/android/app/src/main/res/values-night/themes.xml +8 -0
  59. package/templates/android/app/src/main/res/xml/network_security_config.xml +15 -0
  60. package/templates/android/build.gradle.kts +5 -0
  61. package/templates/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  62. package/templates/android/gradle/wrapper/gradle-wrapper.properties +10 -0
  63. package/templates/android/gradle.properties +7 -0
  64. package/templates/android/gradlew +248 -0
  65. package/templates/android/gradlew.bat +82 -0
  66. package/templates/android/settings.gradle.kts +28 -0
  67. package/templates/ios/App/AppDelegate.swift +52 -0
  68. package/templates/ios/App/Assets.xcassets/AppIcon.appiconset/AppIcon.png +0 -0
  69. package/templates/ios/App/Assets.xcassets/AppIcon.appiconset/Contents.json +14 -0
  70. package/templates/ios/App/Assets.xcassets/Contents.json +6 -0
  71. package/templates/ios/App/Assets.xcassets/LaunchBackground.colorset/Contents.json +20 -0
  72. package/templates/ios/App/BundleResourceFetcher.swift +136 -0
  73. package/templates/ios/App/Info.plist +48 -0
  74. package/templates/ios/App/LynxViewController.swift +108 -0
  75. package/templates/ios/App/XElementRegistry.swift +51 -0
  76. package/templates/ios/App.xcodeproj/project.pbxproj +346 -0
  77. package/templates/ios/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  78. package/templates/ios/App.xcodeproj/xcshareddata/xcschemes/App.xcscheme +76 -0
  79. package/templates/ios/Config/App.xcconfig +9 -0
  80. package/templates/ios/LynxBundle/.gitkeep +0 -0
@@ -0,0 +1,108 @@
1
+ import Lynx
2
+ import UIKit
3
+
4
+ /// Hosts the app's single LynxView. Angular Router does all navigation inside
5
+ /// it, so the shell never pushes another view controller.
6
+ final class LynxViewController: UIViewController {
7
+ private var lynxView: LynxView?
8
+ private var lastViewport: CGRect = .zero
9
+
10
+ override func viewDidLoad() {
11
+ super.viewDidLoad()
12
+ view.backgroundColor = UIColor(named: "LaunchBackground") ?? .systemBackground
13
+
14
+ let fetcher = BundleResourceFetcher.shared
15
+ let screenSize = UIScreen.main.bounds.size
16
+ let lynxView = LynxView { builder in
17
+ builder.config = LynxConfig(provider: LynxEnv.sharedInstance().config.templateProvider)
18
+ builder.screenSize = screenSize
19
+ builder.fontScale = 1.0
20
+ builder.enableGenericResourceFetcher = .true
21
+ builder.genericResourceFetcher = fetcher
22
+ builder.templateResourceFetcher = fetcher
23
+ builder.mediaResourceFetcher = fetcher
24
+ }
25
+ lynxView.layoutWidthMode = .exact
26
+ lynxView.layoutHeightMode = .exact
27
+ view.addSubview(lynxView)
28
+ self.lynxView = lynxView
29
+
30
+ layoutLynxView()
31
+ lynxView.updateGlobalProps(with: globalProps())
32
+ lynxView.loadTemplate(fromURL: "main.lynx.bundle", initData: nil)
33
+
34
+ // Send the new theme when the phone switches between light and dark
35
+ // while the app is open. Before iOS 17, traitCollectionDidChange does.
36
+ if #available(iOS 17.0, *) {
37
+ registerForTraitChanges([UITraitUserInterfaceStyle.self]) {
38
+ (controller: LynxViewController, _: UITraitCollection) in
39
+ controller.lynxView?.updateGlobalProps(with: controller.globalProps())
40
+ }
41
+ }
42
+ }
43
+
44
+ @available(iOS, deprecated: 17.0, message: "registerForTraitChanges in viewDidLoad replaces it")
45
+ override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
46
+ super.traitCollectionDidChange(previousTraitCollection)
47
+ if #unavailable(iOS 17.0),
48
+ traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection)
49
+ {
50
+ lynxView?.updateGlobalProps(with: globalProps())
51
+ }
52
+ }
53
+
54
+ override func viewDidLayoutSubviews() {
55
+ super.viewDidLayoutSubviews()
56
+ layoutLynxView()
57
+ }
58
+
59
+ /// Keeps the LynxView inside the safe area, so a freshly generated app
60
+ /// doesn't draw under the notch or the home indicator. The insets are also
61
+ /// passed as global props for apps that want to know them.
62
+ ///
63
+ /// CSS env(safe-area-inset-*) is 0 on every side, which is right for a page
64
+ /// that's already inside the safe area, and matches Android, where Lynx
65
+ /// never sets it. Lynx reads it from the key window when a LynxView is
66
+ /// created, and viewDidLoad runs before SceneDelegate makes the window key.
67
+ /// Creating the LynxView later would make env() add the insets a second time.
68
+ private func layoutLynxView() {
69
+ guard let lynxView else { return }
70
+ let frame = view.bounds.inset(by: view.safeAreaInsets)
71
+ guard frame != lastViewport else { return }
72
+ lastViewport = frame
73
+ lynxView.frame = frame
74
+ lynxView.preferredLayoutWidth = frame.width
75
+ lynxView.preferredLayoutHeight = frame.height
76
+ lynxView.updateViewport(
77
+ withPreferredLayoutWidth: frame.width, preferredLayoutHeight: frame.height)
78
+ lynxView.updateGlobalProps(with: globalProps())
79
+ lynxView.triggerLayout()
80
+ }
81
+
82
+ /// The global props the runtime reads: `theme` (LynxTheme), `isNotchScreen`
83
+ /// (LynxSafeArea) and `appLocale` (LynxLocale), plus the safe-area insets.
84
+ /// The Android shell sends the same keys, and Lynx Explorer sends theme and
85
+ /// isNotchScreen too.
86
+ private func globalProps() -> LynxTemplateData {
87
+ let insets = view.safeAreaInsets
88
+ var props: [String: Any] = [
89
+ "platform": "ios",
90
+ "safeAreaTop": insets.top,
91
+ "safeAreaBottom": insets.bottom,
92
+ "safeAreaLeft": insets.left,
93
+ "safeAreaRight": insets.right,
94
+ // Lynx Explorer's test: anything beyond a plain 20pt status bar, as on
95
+ // iPhones with a notch or Dynamic Island.
96
+ "isNotchScreen": insets.top > 20 || insets.bottom > 0 || insets.left > 0
97
+ || insets.right > 0,
98
+ "theme": traitCollection.userInterfaceStyle == .dark ? "Dark" : "Light",
99
+ ]
100
+ // The user's first language as a BCP 47 tag, such as "fr-FR". iOS
101
+ // restarts the app when the language changes, so there's no update to send.
102
+ if let language = Locale.preferredLanguages.first {
103
+ props["appLocale"] = language
104
+ }
105
+ // Without useBoolLiterals, Lynx turns a Bool into 1 or 0.
106
+ return LynxTemplateData(dictionary: props, useBoolLiterals: true)
107
+ }
108
+ }
@@ -0,0 +1,51 @@
1
+ import Lynx
2
+ import XElement
3
+
4
+ /// Registers XElement's elements: `<input>`, `<textarea>`, `<overlay>`,
5
+ /// `<svg>`, `<blur-view>`, `<viewpager>`, `<refresh>`, the
6
+ /// `<scroll-coordinator>` family, `<webview>` and `<video>`. Lynx's core
7
+ /// doesn't include them, and a tag nothing is registered for renders nothing.
8
+ ///
9
+ /// Lynx Explorer gets these registrations from XElement's `Behavior` subspec,
10
+ /// but that subspec also links Markdown, an element the runtime doesn't
11
+ /// support, so the frameworks build leaves it out
12
+ /// (scripts/build-lynx-ios-frameworks.sh) and the shell registers the same
13
+ /// classes under the same names here, before the first LynxConfig or LynxView
14
+ /// exists.
15
+ enum XElementRegistry {
16
+ static func register() {
17
+ let elements: [(String, AnyClass)] = [
18
+ ("input", LynxUIInput.self),
19
+ ("textarea", LynxUITextArea.self),
20
+ ("overlay", LynxUIOverlay.self),
21
+ ("svg", LynxUISVG.self),
22
+ ("blur-view", LynxUIBlurView.self),
23
+ ("viewpager", LynxUIViewPager.self),
24
+ ("viewpager-item", LynxUIViewPagerItem.self),
25
+ ("refresh", LynxUIRefresh.self),
26
+ ("refresh-header", LynxUIRefreshHeader.self),
27
+ ("scroll-coordinator", LynxUIScrollCoordinator.self),
28
+ ("scroll-coordinator-header", LynxUIScrollCoordinatorHeader.self),
29
+ ("scroll-coordinator-slot", LynxUIScrollCoordinatorSlot.self),
30
+ ("scroll-coordinator-slot-drag", LynxUIScrollCoordinatorSlotDrag.self),
31
+ ("scroll-coordinator-toolbar", LynxUIScrollCoordinatorToolbar.self),
32
+ ("webview", LynxUIWebView.self),
33
+ ("video", LynxUIVideo.self),
34
+ ]
35
+ for (name, ui) in elements {
36
+ LynxComponentRegistry.registerUI(ui, withName: name)
37
+ }
38
+ // The elements whose size comes from their content (a text field's
39
+ // text, an overlay's screen, a refresh's header) also measure themselves
40
+ // in layout, through a shadow node.
41
+ let shadowNodes: [(String, AnyClass)] = [
42
+ ("input", LynxUIInputShadowNode.self),
43
+ ("textarea", LynxUITextAreaShadowNode.self),
44
+ ("overlay", LynxUIOverlayShadowNode.self),
45
+ ("refresh", LynxUIRefreshShadowNode.self),
46
+ ]
47
+ for (name, node) in shadowNodes {
48
+ LynxComponentRegistry.registerShadowNode(node, withName: name)
49
+ }
50
+ }
51
+ }
@@ -0,0 +1,346 @@
1
+ // !$*UTF8*$!
2
+ {
3
+ archiveVersion = 1;
4
+ classes = {
5
+ };
6
+ objectVersion = 77;
7
+ objects = {
8
+
9
+ /* Begin PBXBuildFile section */
10
+ 09889B93414D48EE3B7BB794 /* LynxBase.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03FA19016485E5D5DFE1595F /* LynxBase.xcframework */; };
11
+ 0E3870431039EBF246629EDC /* LynxBase.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 03FA19016485E5D5DFE1595F /* LynxBase.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
12
+ 24F6F7C0ED16226B5F4CEC64 /* libwebp.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 22AE3F7CF67B188787336BFA /* libwebp.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
13
+ 3222B5E4F829B616E7F195E6 /* LynxService.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 59F6406B1F8C89E22DDE0B86 /* LynxService.xcframework */; };
14
+ 333153D6D20AE3F4F4F0F232 /* XElement.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CA3E9DB48B8E7102AFB3F9D3 /* XElement.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
15
+ 3C05B6061112B7F48C5D3539 /* LynxServiceAPI.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 1DB5C3D66078CC41360F16AF /* LynxServiceAPI.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
16
+ 481B830F1B162EF6665B22C7 /* ServalSVG.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1555CF4C65B98EB4D3757A5B /* ServalSVG.xcframework */; };
17
+ 4C8131B26C3C8894FC77643D /* LynxService.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 59F6406B1F8C89E22DDE0B86 /* LynxService.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
18
+ 4CFD715805AA40F2DF9A81AF /* LynxServiceAPI.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DB5C3D66078CC41360F16AF /* LynxServiceAPI.xcframework */; };
19
+ 52C2300A66557A4A04A633FD /* SDWebImage.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0CDAE1A45DE3FB3C238352B1 /* SDWebImage.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
20
+ 55C00449AF3D55EB900A1B9A /* MJRefresh.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A479BE709FC284B487B4B3EE /* MJRefresh.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
21
+ 5D986CA1D5DAB3B9F6D299F5 /* ServalSVG.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 1555CF4C65B98EB4D3757A5B /* ServalSVG.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
22
+ 5F80D1C6C1436E9CB4F93155 /* PrimJS.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B827DF13C44D4B05B7DAE8C /* PrimJS.xcframework */; };
23
+ 7F265E09F76C87AD1CB5DECB /* LynxBundle in Resources */ = {isa = PBXBuildFile; fileRef = D84EC48E5D673EC745AF0F7D /* LynxBundle */; };
24
+ 8BCF0DFFF316AA01FC859C29 /* Lynx.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06FE05FCCC1F0C34FAAAAE10 /* Lynx.xcframework */; };
25
+ 8DC415C7FF88636451762348 /* Lynx.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 06FE05FCCC1F0C34FAAAAE10 /* Lynx.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
26
+ 96D79D9E007FEA2813F7072F /* SDWebImageWebPCoder.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 938799E9025522AF0DB08F41 /* SDWebImageWebPCoder.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
27
+ C153F098EA734F20BDC0E7F1 /* libwebp.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22AE3F7CF67B188787336BFA /* libwebp.xcframework */; };
28
+ C92615D6F55A8C1D8D6489E7 /* PrimJS.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6B827DF13C44D4B05B7DAE8C /* PrimJS.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
29
+ CF3E40650CC18BF7B0B1AB22 /* SDWebImage.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0CDAE1A45DE3FB3C238352B1 /* SDWebImage.xcframework */; };
30
+ E0F04E5FF5F7548B94615806 /* MJRefresh.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = A479BE709FC284B487B4B3EE /* MJRefresh.xcframework */; };
31
+ ED8182CEA14283E4D2AB28E9 /* SDWebImageWebPCoder.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 938799E9025522AF0DB08F41 /* SDWebImageWebPCoder.xcframework */; };
32
+ F9F12589EAE493E887916AB0 /* XElement.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA3E9DB48B8E7102AFB3F9D3 /* XElement.xcframework */; };
33
+ /* End PBXBuildFile section */
34
+
35
+ /* Begin PBXCopyFilesBuildPhase section */
36
+ 60782C70CAE3611E1ABED20A /* Embed Frameworks */ = {
37
+ isa = PBXCopyFilesBuildPhase;
38
+ buildActionMask = 2147483647;
39
+ dstPath = "";
40
+ dstSubfolderSpec = 10;
41
+ files = (
42
+ 8DC415C7FF88636451762348 /* Lynx.xcframework in Embed Frameworks */,
43
+ 0E3870431039EBF246629EDC /* LynxBase.xcframework in Embed Frameworks */,
44
+ 3C05B6061112B7F48C5D3539 /* LynxServiceAPI.xcframework in Embed Frameworks */,
45
+ 4C8131B26C3C8894FC77643D /* LynxService.xcframework in Embed Frameworks */,
46
+ C92615D6F55A8C1D8D6489E7 /* PrimJS.xcframework in Embed Frameworks */,
47
+ 52C2300A66557A4A04A633FD /* SDWebImage.xcframework in Embed Frameworks */,
48
+ 96D79D9E007FEA2813F7072F /* SDWebImageWebPCoder.xcframework in Embed Frameworks */,
49
+ 24F6F7C0ED16226B5F4CEC64 /* libwebp.xcframework in Embed Frameworks */,
50
+ 333153D6D20AE3F4F4F0F232 /* XElement.xcframework in Embed Frameworks */,
51
+ 5D986CA1D5DAB3B9F6D299F5 /* ServalSVG.xcframework in Embed Frameworks */,
52
+ 55C00449AF3D55EB900A1B9A /* MJRefresh.xcframework in Embed Frameworks */,
53
+ );
54
+ name = "Embed Frameworks";
55
+ runOnlyForDeploymentPostprocessing = 0;
56
+ };
57
+ /* End PBXCopyFilesBuildPhase section */
58
+
59
+ /* Begin PBXFileReference section */
60
+ 03FA19016485E5D5DFE1595F /* LynxBase.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = LynxBase.xcframework; sourceTree = "<group>"; };
61
+ 06FE05FCCC1F0C34FAAAAE10 /* Lynx.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = Lynx.xcframework; sourceTree = "<group>"; };
62
+ 0CDAE1A45DE3FB3C238352B1 /* SDWebImage.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = SDWebImage.xcframework; sourceTree = "<group>"; };
63
+ 1555CF4C65B98EB4D3757A5B /* ServalSVG.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = ServalSVG.xcframework; sourceTree = "<group>"; };
64
+ 15B4BAB9D017652EC88BA5A1 /* App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App.app; sourceTree = BUILT_PRODUCTS_DIR; };
65
+ 1DB5C3D66078CC41360F16AF /* LynxServiceAPI.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = LynxServiceAPI.xcframework; sourceTree = "<group>"; };
66
+ 22AE3F7CF67B188787336BFA /* libwebp.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = libwebp.xcframework; sourceTree = "<group>"; };
67
+ 33520879069FA35A78AACE2A /* Config/App.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config/App.xcconfig; sourceTree = "<group>"; };
68
+ 59F6406B1F8C89E22DDE0B86 /* LynxService.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = LynxService.xcframework; sourceTree = "<group>"; };
69
+ 6B827DF13C44D4B05B7DAE8C /* PrimJS.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = PrimJS.xcframework; sourceTree = "<group>"; };
70
+ 938799E9025522AF0DB08F41 /* SDWebImageWebPCoder.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = SDWebImageWebPCoder.xcframework; sourceTree = "<group>"; };
71
+ A479BE709FC284B487B4B3EE /* MJRefresh.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = MJRefresh.xcframework; sourceTree = "<group>"; };
72
+ CA3E9DB48B8E7102AFB3F9D3 /* XElement.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = XElement.xcframework; sourceTree = "<group>"; };
73
+ D84EC48E5D673EC745AF0F7D /* LynxBundle */ = {isa = PBXFileReference; lastKnownFileType = folder; path = LynxBundle; sourceTree = "<group>"; };
74
+ /* End PBXFileReference section */
75
+
76
+ /* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
77
+ 492CA924B750B91F77A6FE8B /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = {
78
+ isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
79
+ membershipExceptions = (
80
+ Info.plist,
81
+ );
82
+ target = FAC36A2364C8DD5EE47C8F83 /* App */;
83
+ };
84
+ /* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
85
+
86
+ /* Begin PBXFileSystemSynchronizedRootGroup section */
87
+ 1E2271E301A1418B76BCEE94 /* App */ = {
88
+ isa = PBXFileSystemSynchronizedRootGroup;
89
+ exceptions = (
90
+ 492CA924B750B91F77A6FE8B /* PBXFileSystemSynchronizedBuildFileExceptionSet */,
91
+ );
92
+ path = App;
93
+ sourceTree = "<group>";
94
+ };
95
+ /* End PBXFileSystemSynchronizedRootGroup section */
96
+
97
+ /* Begin PBXFrameworksBuildPhase section */
98
+ 5AA9C02D0658383168B86040 /* Frameworks */ = {
99
+ isa = PBXFrameworksBuildPhase;
100
+ buildActionMask = 2147483647;
101
+ files = (
102
+ 8BCF0DFFF316AA01FC859C29 /* Lynx.xcframework in Frameworks */,
103
+ 09889B93414D48EE3B7BB794 /* LynxBase.xcframework in Frameworks */,
104
+ 4CFD715805AA40F2DF9A81AF /* LynxServiceAPI.xcframework in Frameworks */,
105
+ 3222B5E4F829B616E7F195E6 /* LynxService.xcframework in Frameworks */,
106
+ 5F80D1C6C1436E9CB4F93155 /* PrimJS.xcframework in Frameworks */,
107
+ CF3E40650CC18BF7B0B1AB22 /* SDWebImage.xcframework in Frameworks */,
108
+ ED8182CEA14283E4D2AB28E9 /* SDWebImageWebPCoder.xcframework in Frameworks */,
109
+ C153F098EA734F20BDC0E7F1 /* libwebp.xcframework in Frameworks */,
110
+ F9F12589EAE493E887916AB0 /* XElement.xcframework in Frameworks */,
111
+ 481B830F1B162EF6665B22C7 /* ServalSVG.xcframework in Frameworks */,
112
+ E0F04E5FF5F7548B94615806 /* MJRefresh.xcframework in Frameworks */,
113
+ );
114
+ runOnlyForDeploymentPostprocessing = 0;
115
+ };
116
+ /* End PBXFrameworksBuildPhase section */
117
+
118
+ /* Begin PBXGroup section */
119
+ 6FFE89FEFC90DB23520269AF = {
120
+ isa = PBXGroup;
121
+ children = (
122
+ 1E2271E301A1418B76BCEE94 /* App */,
123
+ D84EC48E5D673EC745AF0F7D /* LynxBundle */,
124
+ 33520879069FA35A78AACE2A /* Config/App.xcconfig */,
125
+ FA5D34B2B07A6267AC9C2508 /* Frameworks */,
126
+ 97410802F664942F1C391C78 /* Products */,
127
+ );
128
+ sourceTree = "<group>";
129
+ };
130
+ 97410802F664942F1C391C78 /* Products */ = {
131
+ isa = PBXGroup;
132
+ children = (
133
+ 15B4BAB9D017652EC88BA5A1 /* App.app */,
134
+ );
135
+ name = Products;
136
+ sourceTree = "<group>";
137
+ };
138
+ FA5D34B2B07A6267AC9C2508 /* Frameworks */ = {
139
+ isa = PBXGroup;
140
+ children = (
141
+ 06FE05FCCC1F0C34FAAAAE10 /* Lynx.xcframework */,
142
+ 03FA19016485E5D5DFE1595F /* LynxBase.xcframework */,
143
+ 1DB5C3D66078CC41360F16AF /* LynxServiceAPI.xcframework */,
144
+ 59F6406B1F8C89E22DDE0B86 /* LynxService.xcframework */,
145
+ 6B827DF13C44D4B05B7DAE8C /* PrimJS.xcframework */,
146
+ 0CDAE1A45DE3FB3C238352B1 /* SDWebImage.xcframework */,
147
+ 938799E9025522AF0DB08F41 /* SDWebImageWebPCoder.xcframework */,
148
+ 22AE3F7CF67B188787336BFA /* libwebp.xcframework */,
149
+ CA3E9DB48B8E7102AFB3F9D3 /* XElement.xcframework */,
150
+ 1555CF4C65B98EB4D3757A5B /* ServalSVG.xcframework */,
151
+ A479BE709FC284B487B4B3EE /* MJRefresh.xcframework */,
152
+ );
153
+ path = Frameworks;
154
+ sourceTree = "<group>";
155
+ };
156
+ /* End PBXGroup section */
157
+
158
+ /* Begin PBXNativeTarget section */
159
+ FAC36A2364C8DD5EE47C8F83 /* App */ = {
160
+ isa = PBXNativeTarget;
161
+ buildConfigurationList = 4AF87365F2646CB156F92E4F /* Build configuration list for PBXNativeTarget "App" */;
162
+ buildPhases = (
163
+ 59BB6414D2EFF7E353A51149 /* Sources */,
164
+ 5AA9C02D0658383168B86040 /* Frameworks */,
165
+ D4F2F0D8A053211558741E95 /* Resources */,
166
+ 60782C70CAE3611E1ABED20A /* Embed Frameworks */,
167
+ );
168
+ buildRules = (
169
+ );
170
+ dependencies = (
171
+ );
172
+ fileSystemSynchronizedGroups = (
173
+ 1E2271E301A1418B76BCEE94 /* App */,
174
+ );
175
+ name = App;
176
+ productName = App;
177
+ productReference = 15B4BAB9D017652EC88BA5A1 /* App.app */;
178
+ productType = "com.apple.product-type.application";
179
+ };
180
+ /* End PBXNativeTarget section */
181
+
182
+ /* Begin PBXProject section */
183
+ 0C772889932C3A1BA02CADB1 /* Project object */ = {
184
+ isa = PBXProject;
185
+ attributes = {
186
+ BuildIndependentTargetsInParallel = 1;
187
+ LastSwiftUpdateCheck = 2700;
188
+ LastUpgradeCheck = 2700;
189
+ TargetAttributes = {
190
+ FAC36A2364C8DD5EE47C8F83 = {
191
+ CreatedOnToolsVersion = 27.0;
192
+ };
193
+ };
194
+ };
195
+ buildConfigurationList = A08F5772841DD3E41634B5D4 /* Build configuration list for PBXProject "App" */;
196
+ developmentRegion = en;
197
+ hasScannedForEncodings = 0;
198
+ knownRegions = (
199
+ en,
200
+ Base,
201
+ );
202
+ mainGroup = 6FFE89FEFC90DB23520269AF;
203
+ minimizedProjectReferenceProxies = 1;
204
+ preferredProjectObjectVersion = 77;
205
+ productRefGroup = 97410802F664942F1C391C78 /* Products */;
206
+ projectDirPath = "";
207
+ projectRoot = "";
208
+ targets = (
209
+ FAC36A2364C8DD5EE47C8F83 /* App */,
210
+ );
211
+ };
212
+ /* End PBXProject section */
213
+
214
+ /* Begin PBXResourcesBuildPhase section */
215
+ D4F2F0D8A053211558741E95 /* Resources */ = {
216
+ isa = PBXResourcesBuildPhase;
217
+ buildActionMask = 2147483647;
218
+ files = (
219
+ 7F265E09F76C87AD1CB5DECB /* LynxBundle in Resources */,
220
+ );
221
+ runOnlyForDeploymentPostprocessing = 0;
222
+ };
223
+ /* End PBXResourcesBuildPhase section */
224
+
225
+ /* Begin PBXSourcesBuildPhase section */
226
+ 59BB6414D2EFF7E353A51149 /* Sources */ = {
227
+ isa = PBXSourcesBuildPhase;
228
+ buildActionMask = 2147483647;
229
+ files = (
230
+ );
231
+ runOnlyForDeploymentPostprocessing = 0;
232
+ };
233
+ /* End PBXSourcesBuildPhase section */
234
+
235
+ /* Begin XCBuildConfiguration section */
236
+ 06FC89DDC808DD28668115D9 /* Release */ = {
237
+ isa = XCBuildConfiguration;
238
+ baseConfigurationReference = 33520879069FA35A78AACE2A /* Config/App.xcconfig */;
239
+ buildSettings = {
240
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
241
+ CODE_SIGN_STYLE = Automatic;
242
+ GENERATE_INFOPLIST_FILE = NO;
243
+ INFOPLIST_FILE = App/Info.plist;
244
+ LD_RUNPATH_SEARCH_PATHS = (
245
+ "$(inherited)",
246
+ "@executable_path/Frameworks",
247
+ );
248
+ PRODUCT_NAME = "$(ANGULAR_LYNX_PRODUCT_NAME)";
249
+ TARGETED_DEVICE_FAMILY = 1;
250
+ };
251
+ name = Release;
252
+ };
253
+ C1A9AA0CCB359AF8A4A84EA6 /* Debug */ = {
254
+ isa = XCBuildConfiguration;
255
+ buildSettings = {
256
+ ALWAYS_SEARCH_USER_PATHS = NO;
257
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
258
+ CLANG_ANALYZER_NONNULL = YES;
259
+ CLANG_ENABLE_MODULES = YES;
260
+ CLANG_ENABLE_OBJC_ARC = YES;
261
+ COPY_PHASE_STRIP = NO;
262
+ DEBUG_INFORMATION_FORMAT = dwarf;
263
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
264
+ ENABLE_TESTABILITY = YES;
265
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
266
+ GCC_NO_COMMON_BLOCKS = YES;
267
+ GCC_OPTIMIZATION_LEVEL = 0;
268
+ GCC_PREPROCESSOR_DEFINITIONS = (
269
+ "DEBUG=1",
270
+ "$(inherited)",
271
+ );
272
+ IPHONEOS_DEPLOYMENT_TARGET = 15.0;
273
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
274
+ ONLY_ACTIVE_ARCH = YES;
275
+ SDKROOT = iphoneos;
276
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
277
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
278
+ SWIFT_VERSION = 5.0;
279
+ };
280
+ name = Debug;
281
+ };
282
+ F0F84BE733380CF08819D751 /* Release */ = {
283
+ isa = XCBuildConfiguration;
284
+ buildSettings = {
285
+ ALWAYS_SEARCH_USER_PATHS = NO;
286
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
287
+ CLANG_ANALYZER_NONNULL = YES;
288
+ CLANG_ENABLE_MODULES = YES;
289
+ CLANG_ENABLE_OBJC_ARC = YES;
290
+ COPY_PHASE_STRIP = NO;
291
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
292
+ ENABLE_NS_ASSERTIONS = NO;
293
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
294
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
295
+ GCC_NO_COMMON_BLOCKS = YES;
296
+ IPHONEOS_DEPLOYMENT_TARGET = 15.0;
297
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
298
+ SDKROOT = iphoneos;
299
+ SWIFT_COMPILATION_MODE = wholemodule;
300
+ SWIFT_VERSION = 5.0;
301
+ VALIDATE_PRODUCT = YES;
302
+ };
303
+ name = Release;
304
+ };
305
+ F8B01EDC4F57130045D35BBC /* Debug */ = {
306
+ isa = XCBuildConfiguration;
307
+ baseConfigurationReference = 33520879069FA35A78AACE2A /* Config/App.xcconfig */;
308
+ buildSettings = {
309
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
310
+ CODE_SIGN_STYLE = Automatic;
311
+ GENERATE_INFOPLIST_FILE = NO;
312
+ INFOPLIST_FILE = App/Info.plist;
313
+ LD_RUNPATH_SEARCH_PATHS = (
314
+ "$(inherited)",
315
+ "@executable_path/Frameworks",
316
+ );
317
+ PRODUCT_NAME = "$(ANGULAR_LYNX_PRODUCT_NAME)";
318
+ TARGETED_DEVICE_FAMILY = 1;
319
+ };
320
+ name = Debug;
321
+ };
322
+ /* End XCBuildConfiguration section */
323
+
324
+ /* Begin XCConfigurationList section */
325
+ 4AF87365F2646CB156F92E4F /* Build configuration list for PBXNativeTarget "App" */ = {
326
+ isa = XCConfigurationList;
327
+ buildConfigurations = (
328
+ F8B01EDC4F57130045D35BBC /* Debug */,
329
+ 06FC89DDC808DD28668115D9 /* Release */,
330
+ );
331
+ defaultConfigurationIsVisible = 0;
332
+ defaultConfigurationName = Release;
333
+ };
334
+ A08F5772841DD3E41634B5D4 /* Build configuration list for PBXProject "App" */ = {
335
+ isa = XCConfigurationList;
336
+ buildConfigurations = (
337
+ C1A9AA0CCB359AF8A4A84EA6 /* Debug */,
338
+ F0F84BE733380CF08819D751 /* Release */,
339
+ );
340
+ defaultConfigurationIsVisible = 0;
341
+ defaultConfigurationName = Release;
342
+ };
343
+ /* End XCConfigurationList section */
344
+ };
345
+ rootObject = 0C772889932C3A1BA02CADB1 /* Project object */;
346
+ }
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Workspace
3
+ version = "1.0">
4
+ <FileRef
5
+ location = "self:">
6
+ </FileRef>
7
+ </Workspace>
@@ -0,0 +1,76 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Scheme
3
+ LastUpgradeVersion = "2700"
4
+ version = "1.7">
5
+ <BuildAction
6
+ parallelizeBuildables = "YES"
7
+ buildImplicitDependencies = "YES">
8
+ <BuildActionEntries>
9
+ <BuildActionEntry
10
+ buildForTesting = "YES"
11
+ buildForRunning = "YES"
12
+ buildForProfiling = "YES"
13
+ buildForArchiving = "YES"
14
+ buildForAnalyzing = "YES">
15
+ <BuildableReference
16
+ BuildableIdentifier = "primary"
17
+ BlueprintIdentifier = "FAC36A2364C8DD5EE47C8F83"
18
+ BuildableName = "App.app"
19
+ BlueprintName = "App"
20
+ ReferencedContainer = "container:App.xcodeproj">
21
+ </BuildableReference>
22
+ </BuildActionEntry>
23
+ </BuildActionEntries>
24
+ </BuildAction>
25
+ <TestAction
26
+ buildConfiguration = "Debug"
27
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29
+ shouldUseLaunchSchemeArgsEnv = "YES">
30
+ </TestAction>
31
+ <LaunchAction
32
+ buildConfiguration = "Debug"
33
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
34
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
35
+ launchStyle = "0"
36
+ useCustomWorkingDirectory = "NO"
37
+ ignoresPersistentStateOnLaunch = "NO"
38
+ debugDocumentVersioning = "YES"
39
+ debugServiceExtension = "internal"
40
+ allowLocationSimulation = "YES">
41
+ <BuildableProductRunnable
42
+ runnableDebuggingMode = "0">
43
+ <BuildableReference
44
+ BuildableIdentifier = "primary"
45
+ BlueprintIdentifier = "FAC36A2364C8DD5EE47C8F83"
46
+ BuildableName = "App.app"
47
+ BlueprintName = "App"
48
+ ReferencedContainer = "container:App.xcodeproj">
49
+ </BuildableReference>
50
+ </BuildableProductRunnable>
51
+ </LaunchAction>
52
+ <ProfileAction
53
+ buildConfiguration = "Release"
54
+ shouldUseLaunchSchemeArgsEnv = "YES"
55
+ savedToolIdentifier = ""
56
+ useCustomWorkingDirectory = "NO"
57
+ debugDocumentVersioning = "YES">
58
+ <BuildableProductRunnable
59
+ runnableDebuggingMode = "0">
60
+ <BuildableReference
61
+ BuildableIdentifier = "primary"
62
+ BlueprintIdentifier = "FAC36A2364C8DD5EE47C8F83"
63
+ BuildableName = "App.app"
64
+ BlueprintName = "App"
65
+ ReferencedContainer = "container:App.xcodeproj">
66
+ </BuildableReference>
67
+ </BuildableProductRunnable>
68
+ </ProfileAction>
69
+ <AnalyzeAction
70
+ buildConfiguration = "Debug">
71
+ </AnalyzeAction>
72
+ <ArchiveAction
73
+ buildConfiguration = "Release"
74
+ revealArchiveInOrganizer = "YES">
75
+ </ArchiveAction>
76
+ </Scheme>
@@ -0,0 +1,9 @@
1
+ // Written by @blotch/angular-lynx-native from the builder options in
2
+ // angular.json on every build. Edits here are overwritten; change angular.json
3
+ // instead (or eject).
4
+ ANGULAR_LYNX_PRODUCT_NAME = App
5
+ ANGULAR_LYNX_DISPLAY_NAME = App
6
+ PRODUCT_BUNDLE_IDENTIFIER = dev.angularlynx.app
7
+ MARKETING_VERSION = 1.0.0
8
+ CURRENT_PROJECT_VERSION = 1
9
+ DEVELOPMENT_TEAM =
File without changes