├── .cargo └── config ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── Info.plist ├── LICENSE-APACHE ├── LICENSE-MIT ├── README.md ├── deploy.sh ├── resources └── favicon.ico ├── rust-toolchain ├── scripts ├── codesign │ ├── README.md │ ├── generate_p12.sh │ └── generate_private_and_csr.sh ├── create_ipa ├── create_sdk_stub └── install_ipa ├── sdk_target └── ios15.yml ├── simple_rust_ios_app.entitlements └── src └── main.rs /.cargo/config: -------------------------------------------------------------------------------- 1 | [build] 2 | target = "aarch64-apple-ios" 3 | 4 | [target.aarch64-apple-ios] 5 | linker = "rust-lld" 6 | 7 | [env] 8 | CC_aarch64-apple-ios = "clang" 9 | IPHONEOS_DEPLOYMENT_TARGET = "7.0" 10 | IPHONEOS_SDKROOT = { value = "sdk/iPhoneOS15.5.sdk", relative = true, force = true } 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /sdk 3 | *.ipa 4 | *.app 5 | .DS_Store -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "bitflags" 7 | version = "1.3.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 10 | 11 | [[package]] 12 | name = "block" 13 | version = "0.1.6" 14 | source = "registry+https://github.com/rust-lang/crates.io-index" 15 | checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 16 | 17 | [[package]] 18 | name = "cacao" 19 | version = "0.3.2" 20 | source = "git+https://github.com/ryanmcgrath/cacao.git#afed7cf1515a6c733f7bac1fde410893084aad63" 21 | dependencies = [ 22 | "block", 23 | "core-foundation", 24 | "core-graphics", 25 | "dispatch", 26 | "lazy_static", 27 | "libc", 28 | "objc", 29 | "objc_id", 30 | "os_info", 31 | "url", 32 | ] 33 | 34 | [[package]] 35 | name = "cfg-if" 36 | version = "1.0.0" 37 | source = "registry+https://github.com/rust-lang/crates.io-index" 38 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 39 | 40 | [[package]] 41 | name = "core-foundation" 42 | version = "0.9.3" 43 | source = "registry+https://github.com/rust-lang/crates.io-index" 44 | checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" 45 | dependencies = [ 46 | "core-foundation-sys", 47 | "libc", 48 | ] 49 | 50 | [[package]] 51 | name = "core-foundation-sys" 52 | version = "0.8.3" 53 | source = "registry+https://github.com/rust-lang/crates.io-index" 54 | checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" 55 | 56 | [[package]] 57 | name = "core-graphics" 58 | version = "0.22.3" 59 | source = "registry+https://github.com/rust-lang/crates.io-index" 60 | checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" 61 | dependencies = [ 62 | "bitflags", 63 | "core-foundation", 64 | "core-graphics-types", 65 | "foreign-types", 66 | "libc", 67 | ] 68 | 69 | [[package]] 70 | name = "core-graphics-types" 71 | version = "0.1.1" 72 | source = "registry+https://github.com/rust-lang/crates.io-index" 73 | checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" 74 | dependencies = [ 75 | "bitflags", 76 | "core-foundation", 77 | "foreign-types", 78 | "libc", 79 | ] 80 | 81 | [[package]] 82 | name = "dispatch" 83 | version = "0.2.0" 84 | source = "registry+https://github.com/rust-lang/crates.io-index" 85 | checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" 86 | 87 | [[package]] 88 | name = "foreign-types" 89 | version = "0.3.2" 90 | source = "registry+https://github.com/rust-lang/crates.io-index" 91 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 92 | dependencies = [ 93 | "foreign-types-shared", 94 | ] 95 | 96 | [[package]] 97 | name = "foreign-types-shared" 98 | version = "0.1.1" 99 | source = "registry+https://github.com/rust-lang/crates.io-index" 100 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 101 | 102 | [[package]] 103 | name = "form_urlencoded" 104 | version = "1.1.0" 105 | source = "registry+https://github.com/rust-lang/crates.io-index" 106 | checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" 107 | dependencies = [ 108 | "percent-encoding", 109 | ] 110 | 111 | [[package]] 112 | name = "idna" 113 | version = "0.3.0" 114 | source = "registry+https://github.com/rust-lang/crates.io-index" 115 | checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" 116 | dependencies = [ 117 | "unicode-bidi", 118 | "unicode-normalization", 119 | ] 120 | 121 | [[package]] 122 | name = "lazy_static" 123 | version = "1.4.0" 124 | source = "registry+https://github.com/rust-lang/crates.io-index" 125 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 126 | 127 | [[package]] 128 | name = "libc" 129 | version = "0.2.134" 130 | source = "registry+https://github.com/rust-lang/crates.io-index" 131 | checksum = "329c933548736bc49fd575ee68c89e8be4d260064184389a5b77517cddd99ffb" 132 | 133 | [[package]] 134 | name = "log" 135 | version = "0.4.17" 136 | source = "registry+https://github.com/rust-lang/crates.io-index" 137 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 138 | dependencies = [ 139 | "cfg-if", 140 | ] 141 | 142 | [[package]] 143 | name = "malloc_buf" 144 | version = "0.0.6" 145 | source = "registry+https://github.com/rust-lang/crates.io-index" 146 | checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 147 | dependencies = [ 148 | "libc", 149 | ] 150 | 151 | [[package]] 152 | name = "objc" 153 | version = "0.2.7" 154 | source = "registry+https://github.com/rust-lang/crates.io-index" 155 | checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 156 | dependencies = [ 157 | "malloc_buf", 158 | ] 159 | 160 | [[package]] 161 | name = "objc_id" 162 | version = "0.1.1" 163 | source = "registry+https://github.com/rust-lang/crates.io-index" 164 | checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" 165 | dependencies = [ 166 | "objc", 167 | ] 168 | 169 | [[package]] 170 | name = "os_info" 171 | version = "3.5.1" 172 | source = "registry+https://github.com/rust-lang/crates.io-index" 173 | checksum = "c4750134fb6a5d49afc80777394ad5d95b04bc12068c6abb92fae8f43817270f" 174 | dependencies = [ 175 | "log", 176 | "serde", 177 | "winapi", 178 | ] 179 | 180 | [[package]] 181 | name = "percent-encoding" 182 | version = "2.2.0" 183 | source = "registry+https://github.com/rust-lang/crates.io-index" 184 | checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" 185 | 186 | [[package]] 187 | name = "proc-macro2" 188 | version = "1.0.46" 189 | source = "registry+https://github.com/rust-lang/crates.io-index" 190 | checksum = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b" 191 | dependencies = [ 192 | "unicode-ident", 193 | ] 194 | 195 | [[package]] 196 | name = "quote" 197 | version = "1.0.21" 198 | source = "registry+https://github.com/rust-lang/crates.io-index" 199 | checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" 200 | dependencies = [ 201 | "proc-macro2", 202 | ] 203 | 204 | [[package]] 205 | name = "serde" 206 | version = "1.0.145" 207 | source = "registry+https://github.com/rust-lang/crates.io-index" 208 | checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" 209 | dependencies = [ 210 | "serde_derive", 211 | ] 212 | 213 | [[package]] 214 | name = "serde_derive" 215 | version = "1.0.145" 216 | source = "registry+https://github.com/rust-lang/crates.io-index" 217 | checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" 218 | dependencies = [ 219 | "proc-macro2", 220 | "quote", 221 | "syn", 222 | ] 223 | 224 | [[package]] 225 | name = "simple_rust_ios_app" 226 | version = "0.1.0" 227 | dependencies = [ 228 | "cacao", 229 | ] 230 | 231 | [[package]] 232 | name = "syn" 233 | version = "1.0.101" 234 | source = "registry+https://github.com/rust-lang/crates.io-index" 235 | checksum = "e90cde112c4b9690b8cbe810cba9ddd8bc1d7472e2cae317b69e9438c1cba7d2" 236 | dependencies = [ 237 | "proc-macro2", 238 | "quote", 239 | "unicode-ident", 240 | ] 241 | 242 | [[package]] 243 | name = "tinyvec" 244 | version = "1.6.0" 245 | source = "registry+https://github.com/rust-lang/crates.io-index" 246 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 247 | dependencies = [ 248 | "tinyvec_macros", 249 | ] 250 | 251 | [[package]] 252 | name = "tinyvec_macros" 253 | version = "0.1.0" 254 | source = "registry+https://github.com/rust-lang/crates.io-index" 255 | checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" 256 | 257 | [[package]] 258 | name = "unicode-bidi" 259 | version = "0.3.8" 260 | source = "registry+https://github.com/rust-lang/crates.io-index" 261 | checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" 262 | 263 | [[package]] 264 | name = "unicode-ident" 265 | version = "1.0.4" 266 | source = "registry+https://github.com/rust-lang/crates.io-index" 267 | checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd" 268 | 269 | [[package]] 270 | name = "unicode-normalization" 271 | version = "0.1.22" 272 | source = "registry+https://github.com/rust-lang/crates.io-index" 273 | checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" 274 | dependencies = [ 275 | "tinyvec", 276 | ] 277 | 278 | [[package]] 279 | name = "url" 280 | version = "2.3.1" 281 | source = "registry+https://github.com/rust-lang/crates.io-index" 282 | checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" 283 | dependencies = [ 284 | "form_urlencoded", 285 | "idna", 286 | "percent-encoding", 287 | ] 288 | 289 | [[package]] 290 | name = "winapi" 291 | version = "0.3.9" 292 | source = "registry+https://github.com/rust-lang/crates.io-index" 293 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 294 | dependencies = [ 295 | "winapi-i686-pc-windows-gnu", 296 | "winapi-x86_64-pc-windows-gnu", 297 | ] 298 | 299 | [[package]] 300 | name = "winapi-i686-pc-windows-gnu" 301 | version = "0.4.0" 302 | source = "registry+https://github.com/rust-lang/crates.io-index" 303 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 304 | 305 | [[package]] 306 | name = "winapi-x86_64-pc-windows-gnu" 307 | version = "0.4.0" 308 | source = "registry+https://github.com/rust-lang/crates.io-index" 309 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 310 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "simple_rust_ios_app" 3 | description = "Some simple iOS Rust App for demonstration." 4 | version = "0.1.0" 5 | edition = "2021" 6 | 7 | [dependencies] 8 | cacao = { git = "https://github.com/ryanmcgrath/cacao.git", features = [ "uikit", "autolayout" ], default-features = false } 9 | -------------------------------------------------------------------------------- /Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildMachineOSBuild 6 | 21E258 7 | CFBundleDevelopmentRegion 8 | en 9 | CFBundleExecutable 10 | simple_rust_ios_app 11 | CFBundleIdentifier 12 | rs.rust.simple-rust-ios-app 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | simple_rust_ios_app 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSupportedPlatforms 22 | 23 | iPhoneOS 24 | 25 | CFBundleVersion 26 | 1 27 | DTCompiler 28 | com.apple.compilers.llvm.clang.1_0 29 | DTPlatformBuild 30 | 19E239 31 | DTPlatformName 32 | iphoneos 33 | DTPlatformVersion 34 | 15.4 35 | DTSDKBuild 36 | 19E239 37 | DTSDKName 38 | iphoneos15.4 39 | DTXcode 40 | 1330 41 | DTXcodeBuild 42 | 13E113 43 | LSRequiresIPhoneOS 44 | 45 | MinimumOSVersion 46 | 15.4 47 | UIApplicationSupportsIndirectInputEvents 48 | 49 | UIDeviceFamily 50 | 51 | 1 52 | 2 53 | 54 | UILaunchScreen 55 | 56 | UILaunchScreen 57 | 58 | 59 | UIRequiredDeviceCapabilities 60 | 61 | arm64 62 | arkit 63 | 64 | UISupportedInterfaceOrientations~ipad 65 | 66 | UIInterfaceOrientationPortrait 67 | 68 | UISupportedInterfaceOrientations~iphone 69 | 70 | UIInterfaceOrientationPortrait 71 | 72 | NSCameraUsageDescription 73 | Need camera access for motion tracking 74 | 75 | 76 | -------------------------------------------------------------------------------- /LICENSE-APACHE: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | 179 | APPENDIX: How to apply the Apache License to your work. 180 | 181 | To apply the Apache License to your work, attach the following 182 | boilerplate notice, with the fields enclosed by brackets "[]" 183 | replaced with your own identifying information. (Don't include 184 | the brackets!) The text should be enclosed in the appropriate 185 | comment syntax for the file format. We also recommend that a 186 | file or class name and description of purpose be included on the 187 | same "printed page" as the copyright notice for easier 188 | identification within third-party archives. 189 | 190 | Copyright [yyyy] [name of copyright owner] 191 | 192 | Licensed under the Apache License, Version 2.0 (the "License"); 193 | you may not use this file except in compliance with the License. 194 | You may obtain a copy of the License at 195 | 196 | http://www.apache.org/licenses/LICENSE-2.0 197 | 198 | Unless required by applicable law or agreed to in writing, software 199 | distributed under the License is distributed on an "AS IS" BASIS, 200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 201 | See the License for the specific language governing permissions and 202 | limitations under the License. -------------------------------------------------------------------------------- /LICENSE-MIT: -------------------------------------------------------------------------------- 1 | Permission is hereby granted, free of charge, to any 2 | person obtaining a copy of this software and associated 3 | documentation files (the "Software"), to deal in the 4 | Software without restriction, including without 5 | limitation the rights to use, copy, modify, merge, 6 | publish, distribute, sublicense, and/or sell copies of 7 | the Software, and to permit persons to whom the Software 8 | is furnished to do so, subject to the following 9 | conditions: 10 | 11 | The above copyright notice and this permission notice 12 | shall be included in all copies or substantial portions 13 | of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF 16 | ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 17 | TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 18 | PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT 19 | SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 22 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 23 | DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # simple_rust_ios_app 2 | 3 | Demonstrate how an iOS application could be build, signed and installed on any OS without the need of any SDK. 4 | 5 | This is based on [ios-beta](https://github.com/ryanmcgrath/cacao/tree/trunk/examples/ios-beta) example from the cocoa repository. 6 | 7 | **Requires Rust 1.64 or upper and [apple-dev-tools-wrapper](https://github.com/marysaka/apple-dev-tools-wrapper)**. 8 | 9 | ## Disclaimer 10 | 11 | This is just a simple PoC. 12 | 13 | The Rust ecosystem doesn't have much bindings around Apple libraries/frameworks (especially for *OS) at the moment, and **when present they are almost always unsafe**. 14 | 15 | You have been warned~! 16 | 17 | ## License 18 | 19 | simple_rust_ios_app is distributed under the terms of either the MIT license or the Apache 20 | License (Version 2.0), at the user's choice. 21 | 22 | See [LICENSE-APACHE](LICENSE-APACHE) and [LICENSE-MIT](LICENSE-MIT). 23 | -------------------------------------------------------------------------------- /deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | APP_NAME=simple_rust_ios_app 6 | TARGET="aarch64-apple-ios" 7 | PROFILE="release" 8 | USE_CARGO_BUNDLE="0" 9 | PRIVATE_DIRECTORY=../private 10 | SDK_TARGET=sdk_target/ios15.yml 11 | SDK_PATH=./sdk/iPhoneOS15.5.sdk 12 | 13 | mkdir -p $SDK_PATH 14 | ./scripts/create_sdk_stub $SDK_TARGET $SDK_PATH 15 | ./scripts/create_ipa $APP_NAME $PRIVATE_DIRECTORY $TARGET $PROFILE $USE_CARGO_BUNDLE 16 | ./scripts/install_ipa $APP_NAME 17 | #rm $APP_NAME.ipa 18 | -------------------------------------------------------------------------------- /resources/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marysaka/simple_rust_ios_app/00f5ddf7598c9633a8ca858774148b45f9eefcc5/resources/favicon.ico -------------------------------------------------------------------------------- /rust-toolchain: -------------------------------------------------------------------------------- 1 | [toolchain] 2 | channel = "stable" 3 | targets = [ "aarch64-apple-ios" ] 4 | profile = "minimal" 5 | -------------------------------------------------------------------------------- /scripts/codesign/README.md: -------------------------------------------------------------------------------- 1 | # codesign 2 | 3 | Those scripts help the process of getting a new certificate from Apple. 4 | 5 | 1. Use ``generate_private_and_csr.sh`` to generate a private key and a CSR. 6 | 2. Upload it on [Apple Developer website](https://developer.apple.com/account/resources/certificates/add) 7 | 3. Download the resulting certificate and execute ``generate_p12.sh`` to generate the final P12 file that will be used by rcodesign. 8 | -------------------------------------------------------------------------------- /scripts/codesign/generate_p12.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | if [ "$#" -ne 3 ]; then 6 | echo "usage " 7 | exit 1 8 | fi 9 | 10 | PRIVATE_CERT_PATH=$1 11 | PRIVATE_KEY_PATH=$2 12 | OUTPUT_PRIVATE_P12_PATH=$3 13 | 14 | openssl x509 -in $PRIVATE_CERT_PATH -inform DER -out private.pem -outform PEM 15 | openssl pkcs12 -export -inkey $PRIVATE_KEY_PATH -in private.pem -out $OUTPUT_PRIVATE_P12_PATH 16 | rm private.pem 17 | -------------------------------------------------------------------------------- /scripts/codesign/generate_private_and_csr.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | if [ "$#" -ne 5 ]; then 6 | echo "usage " 7 | exit 1 8 | fi 9 | 10 | EMAIL=$1 11 | COMMON_NAME=$2 12 | COUNTRY=$3 13 | OUTPUT_PRIVATE_KEY_PATH=$4 14 | OUTPUT_CSR_PATH=$5 15 | 16 | openssl genrsa -out $OUTPUT_PRIVATE_KEY_PATH 2048 17 | openssl req -new -key $OUTPUT_PRIVATE_KEY_PATH -out $OUTPUT_CSR_PATH -subj "/emailAddress=$EMAIL, CN=$COMMON_NAME, C=$COUNTRY" 18 | -------------------------------------------------------------------------------- /scripts/create_ipa: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | if [ "$#" -ne 5 ]; then 6 | echo "usage " 7 | exit 1 8 | fi 9 | 10 | APP_NAME=$1 11 | PRIVATE_DIRECTORY=$2 12 | TARGET=$3 13 | PROFILE=$4 14 | USE_CARGO_BUNDLE=$5 15 | 16 | # TODO: Make it more temp 17 | TEMPORARY_DIRECTORY=./temp 18 | APP_TEMPORARY_DIRECTORY=$TEMPORARY_DIRECTORY/$APP_NAME.app 19 | 20 | rm -rf $TEMPORARY_DIRECTORY 21 | rm -rf $APP_TEMPORARY_DIRECTORY 22 | 23 | mkdir -p $TEMPORARY_DIRECTORY 24 | mkdir -p $APP_TEMPORARY_DIRECTORY 25 | 26 | if [ "$PROFILE" == "debug" ]; then 27 | cargo build --target $TARGET --profile "dev" 28 | else 29 | cargo build --target $TARGET --profile $PROFILE 30 | fi 31 | 32 | if [ "$USE_CARGO_BUNDLE" == "1" ]; then 33 | if [ "$PROFILE" == "debug" ]; then 34 | cargo bundle --target $TARGET --profile "dev" 35 | else 36 | cargo bundle --target $TARGET --profile $PROFILE 37 | fi 38 | 39 | APP_TEMPORARY_DIRECTORY=target/$TARGET/$PROFILE/bundle/ios/$APP_NAME.app 40 | cp $PRIVATE_DIRECTORY/private.mobileprovision $APP_TEMPORARY_DIRECTORY/embedded.mobileprovision 41 | 42 | # cargo bundle doesn't respect iOS requirement for resources, we handle it manually 43 | cp -r resources/* $APP_TEMPORARY_DIRECTORY 44 | echo -n "APPL????" > $APP_TEMPORARY_DIRECTORY/PkgInfo 45 | else 46 | cp target/$TARGET/$PROFILE/$APP_NAME $APP_TEMPORARY_DIRECTORY/$APP_NAME 47 | cp Info.plist $APP_TEMPORARY_DIRECTORY/Info.plist 48 | cp $PRIVATE_DIRECTORY/private.mobileprovision $APP_TEMPORARY_DIRECTORY/embedded.mobileprovision 49 | cp -r resources/* $APP_TEMPORARY_DIRECTORY 50 | echo -n "APPL????" > $APP_TEMPORARY_DIRECTORY/PkgInfo 51 | fi 52 | 53 | 54 | rcodesign sign --p12-file $PRIVATE_DIRECTORY/private.p12 --p12-password-file $PRIVATE_DIRECTORY/private.pass -e $APP_NAME.entitlements $APP_TEMPORARY_DIRECTORY 2> /dev/null 55 | mkdir -p $TEMPORARY_DIRECTORY/Payload 56 | cp -r $APP_TEMPORARY_DIRECTORY $TEMPORARY_DIRECTORY/Payload 57 | rm -rf $APP_NAME.ipa 58 | 59 | pushd $TEMPORARY_DIRECTORY 60 | zip -r ../$APP_NAME.ipa Payload > /dev/null 61 | popd 62 | 63 | rm -rf $TEMPORARY_DIRECTORY/Payload 64 | rm -rf $APP_TEMPORARY_DIRECTORY 65 | rm -r $TEMPORARY_DIRECTORY 66 | -------------------------------------------------------------------------------- /scripts/create_sdk_stub: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | from argparse import ArgumentParser 4 | import json 5 | import os 6 | import shutil 7 | import sys 8 | from typing import Any, Dict, List, Optional, Tuple 9 | import yaml 10 | 11 | 12 | def parse_arguments() -> Tuple[str, str]: 13 | parser = ArgumentParser( 14 | description="Create an SDK stub directory from a definition" 15 | ) 16 | parser.add_argument("definition_yml_path", help="The YAML definition") 17 | parser.add_argument( 18 | "output_directory", help="The output path to use to store the stub SDK" 19 | ) 20 | 21 | args = parser.parse_args() 22 | 23 | definition_yml_path = os.path.abspath(args.definition_yml_path) 24 | output_directory = os.path.abspath(args.output_directory) 25 | 26 | return (definition_yml_path, output_directory) 27 | 28 | 29 | def get_library_name(lib_opaque_object: Any) -> str: 30 | if type(lib_opaque_object) is str: 31 | return lib_opaque_object 32 | elif "name" in lib_opaque_object: 33 | return lib_opaque_object["name"] 34 | else: 35 | raise Exception("TODO") 36 | 37 | 38 | def get_library_path(lib_opaque_object: Any, is_framework: bool) -> str: 39 | if type(lib_opaque_object) is str: 40 | lib_name = lib_opaque_object 41 | if is_framework: 42 | return f"/System/Library/Frameworks/{lib_name}.framework/{lib_name}" 43 | else: 44 | return f"/usr/lib/{lib_name}.dylib" 45 | elif "name" in lib_opaque_object: 46 | lib_name = lib_opaque_object["name"] 47 | if is_framework: 48 | return f"/System/Library/Frameworks/{lib_name}.framework/{lib_name}" 49 | else: 50 | return f"/usr/lib/{lib_name}.dylib" 51 | elif "install_name" in lib_opaque_object: 52 | return lib_opaque_object["install_name"] 53 | else: 54 | raise Exception("TODO") 55 | 56 | 57 | def get_library_tbd_path(lib_opaque_object: Any, is_framework: bool) -> str: 58 | if type(lib_opaque_object) is str: 59 | lib_name = lib_opaque_object 60 | if is_framework: 61 | return f"System/Library/Frameworks/{lib_name}.framework/{lib_name}.tbd" 62 | else: 63 | return f"usr/lib/{lib_name}.tbd" 64 | elif "name" in lib_opaque_object: 65 | lib_name = lib_opaque_object["name"] 66 | if is_framework: 67 | return f"System/Library/Frameworks/{lib_name}.framework/{lib_name}.tbd" 68 | else: 69 | return f"usr/lib/{lib_name}.tbd" 70 | elif "tbd_name" in lib_opaque_object: 71 | if lib_opaque_object["tbd_name"][0] == "/": 72 | return lib_opaque_object["tbd_name"][1:] 73 | 74 | return lib_opaque_object["tbd_name"] 75 | else: 76 | print(lib_opaque_object) 77 | raise Exception("TODO") 78 | 79 | 80 | def get_arch_list( 81 | definition: Dict[str, Any], library_definition: Any 82 | ) -> Optional[List[str]]: 83 | if type(library_definition) is str: 84 | if "archs" in definition: 85 | return definition["archs"] 86 | elif "archs" in library_definition: 87 | return library_definition["archs"] 88 | elif "archs" in definition: 89 | return definition["archs"] 90 | return None 91 | 92 | 93 | def compute_targets(platform_name: str, archs: List[str]) -> str: 94 | targets = [] 95 | 96 | for arch in archs: 97 | targets.append(f"{arch}-{platform_name}") 98 | 99 | return ", ".join(targets) 100 | 101 | 102 | def create_tbd_from_library_definition( 103 | output_directory: str, 104 | definition: Dict[str, Any], 105 | library_definition: Any, 106 | is_framework: bool, 107 | ): 108 | platform_name = definition["platform"] 109 | tbd_path = os.path.join( 110 | output_directory, get_library_tbd_path(library_definition, is_framework) 111 | ) 112 | directory_name = os.path.dirname(tbd_path) 113 | 114 | os.makedirs(directory_name, exist_ok=True) 115 | 116 | archs = get_arch_list(definition, library_definition) 117 | 118 | if archs is None: 119 | raise Exception(f"Missing archs definition for {tbd_path}") 120 | 121 | with open(tbd_path, "w") as f: 122 | lines = ["--- !tapi-tbd", "tbd-version: 4"] 123 | 124 | targets = compute_targets(platform_name, archs) 125 | lines.append(f"targets: [ {targets} ]") 126 | lines.append( 127 | f"install-name: '{get_library_path(library_definition, is_framework)}'" 128 | ) 129 | 130 | if type(library_definition) is not str and "symbols" in library_definition: 131 | symbols = ", ".join(library_definition["symbols"]) 132 | 133 | lines.append(f"exports:") 134 | lines.append(f" - targets: [ {targets} ]") 135 | lines.append(f" symbols: [ {symbols} ]") 136 | 137 | lines.append("...") 138 | lines.append("") 139 | 140 | f.write("\n".join(lines)) 141 | 142 | 143 | def create_sdk_settings_json(output_directory: str, definition: Dict[str, Any]): 144 | with open(os.path.join(output_directory, "SDKSettings.json"), "w") as sdk_json_file: 145 | detail = { 146 | "DisplayName": definition["display_name"], 147 | "DefaultDeploymentTarget": definition["version"], 148 | "MaximumDeploymentTarget": definition["version"], 149 | "Version": definition["version"], 150 | } 151 | 152 | sdk_json_file.write(json.dumps(detail)) 153 | 154 | 155 | def create_sdk_tree(output_directory: str, definition: Dict[str, Any]): 156 | frameworks_list: List[object] = definition["frameworks"] 157 | libraries_list: List[object] = definition["libraries"] 158 | 159 | for framework in frameworks_list: 160 | create_tbd_from_library_definition( 161 | output_directory, definition, framework, True 162 | ) 163 | 164 | for library in libraries_list: 165 | create_tbd_from_library_definition(output_directory, definition, library, False) 166 | 167 | create_sdk_settings_json(output_directory, definition) 168 | 169 | 170 | def main(definition_yml_path: str, output_directory: str) -> int: 171 | if not os.path.exists(definition_yml_path): 172 | print("Definition file not found!") 173 | sys.exit(1) 174 | 175 | with open(definition_yml_path, "r") as f: 176 | definition = yaml.safe_load(f) 177 | 178 | if os.path.exists(output_directory): 179 | shutil.rmtree(output_directory) 180 | 181 | create_sdk_tree(output_directory, definition) 182 | return 0 183 | 184 | 185 | if __name__ == "__main__": 186 | (definition_yml_path, output_directory) = parse_arguments() 187 | sys.exit(main(definition_yml_path, output_directory)) 188 | -------------------------------------------------------------------------------- /scripts/install_ipa: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | if [ "$#" -ne 1 ]; then 6 | echo "usage " 7 | exit 1 8 | fi 9 | 10 | APP_NAME=$1 11 | 12 | ideviceinstaller --install $APP_NAME.ipa --debug -------------------------------------------------------------------------------- /sdk_target/ios15.yml: -------------------------------------------------------------------------------- 1 | display_name: iOS 15.5 2 | version: "15.5" 3 | platform: ios 4 | archs: [ armv7, armv7s, arm64, arm64e ] 5 | libraries: 6 | - name: libobjc 7 | install_name: /usr/lib/libobjc.A.dylib 8 | symbols: 9 | - _objc_alloc 10 | - _objc_allocWithZone 11 | - _objc_alloc_init 12 | - _objc_autoreleasePoolPop 13 | - _objc_autoreleasePoolPush 14 | - _objc_autorelease 15 | - _objc_autoreleaseReturnValue 16 | - _objc_copyWeak 17 | - _objc_destroyWeak 18 | - _objc_initWeak 19 | - _objc_loadWeak 20 | - _objc_loadWeakRetained 21 | - _objc_moveWeak 22 | - _objc_retain 23 | - _objc_retainRuntimeFunction 24 | - _objc_retainAutorelease 25 | - _objc_retainAutoreleaseReturnValue 26 | - _objc_retainAutoreleasedReturnValue 27 | - _objc_retainBlock 28 | - _objc_release 29 | - _objc_releaseRuntimeFunction 30 | - _objc_storeStrong 31 | - _objc_storeWeak 32 | - _objc_unsafeClaimAutoreleasedReturnValue 33 | - _objc_getClass 34 | - _objc_getProtocol 35 | - _objc_msgSend 36 | - _objc_msgSendSuper 37 | - _objc_allocateClassPair 38 | - _objc_registerClassPair 39 | - _objc_disposeClassPair 40 | - _class_getName 41 | - _class_getInstanceMethod 42 | - _object_getClass 43 | - _class_addMethod 44 | - _class_addProtocol 45 | - _class_addIvar 46 | - _class_getInstanceVariable 47 | - _class_isMetaClass 48 | - _ivar_getOffset 49 | - _ivar_getTypeEncoding 50 | - _sel_registerName 51 | - _sel_getName 52 | - _method_getName 53 | - _method_copyReturnType 54 | - _method_copyArgumentType 55 | - _method_getNumberOfArguments 56 | - _protocol_getName 57 | 58 | - name: libSystem 59 | install_name: /usr/lib/libSystem.B.dylib 60 | symbols: 61 | - __Block_copy 62 | - __Block_release 63 | - __NSConcreteStackBlock 64 | - __Unwind_Backtrace 65 | - __Unwind_DeleteException 66 | - __Unwind_GetDataRelBase 67 | - __Unwind_GetIP 68 | - __Unwind_GetIPInfo 69 | - __Unwind_GetLanguageSpecificData 70 | - __Unwind_GetRegionStart 71 | - __Unwind_GetTextRelBase 72 | - __Unwind_RaiseException 73 | - __Unwind_Resume 74 | - __Unwind_SetGR 75 | - __Unwind_SetIP 76 | - ___error 77 | - __dyld_get_image_header 78 | - __dyld_get_image_name 79 | - __dyld_get_image_vmaddr_slide 80 | - __dyld_image_count 81 | - _abort 82 | - _bzero 83 | - _calloc 84 | - _close 85 | - _closedir 86 | - _fcntl 87 | - _free 88 | - _fstat 89 | - _getcwd 90 | - _getenv 91 | - _gettimeofday 92 | - _mach_absolute_time 93 | - _mach_timebase_info 94 | - _malloc 95 | - _memchr 96 | - _memcmp 97 | - _memcpy 98 | - _memmove 99 | - _memset 100 | - _mmap 101 | - _munmap 102 | - _nanosleep 103 | - _lseek 104 | - _open 105 | - _opendir 106 | - _posix_memalign 107 | - _pow 108 | - _powf 109 | - _pthread_cond_destroy 110 | - _pthread_cond_signal 111 | - _pthread_cond_timedwait 112 | - _pthread_cond_wait 113 | - _pthread_getspecific 114 | - _pthread_key_create 115 | - _pthread_key_delete 116 | - _pthread_mutex_destroy 117 | - _pthread_mutex_init 118 | - _pthread_mutex_lock 119 | - _pthread_mutex_trylock 120 | - _pthread_mutex_unlock 121 | - _pthread_mutexattr_destroy 122 | - _pthread_mutexattr_init 123 | - _pthread_mutexattr_settype 124 | - _pthread_rwlock_rdlock 125 | - _pthread_rwlock_wrlock 126 | - _pthread_rwlock_unlock 127 | - _pthread_rwlock_destroy 128 | - _pthread_setspecific 129 | - _read 130 | - _readdir_r 131 | - _realloc 132 | - _sched_yield 133 | - _setenv 134 | - _signal 135 | - _strerror_r 136 | - _strlen 137 | - _write 138 | - _writev 139 | - dyld_stub_binder 140 | - _dispatch_activate 141 | - _dispatch_after 142 | - _dispatch_after_f 143 | - _dispatch_apply 144 | - _dispatch_apply_f 145 | - _dispatch_assert_queue 146 | - _dispatch_assert_queue$V2 147 | - _dispatch_assert_queue_barrier 148 | - _dispatch_assert_queue_not 149 | - _dispatch_assert_queue_not$V2 150 | - _dispatch_async 151 | - _dispatch_async_and_wait 152 | - _dispatch_async_and_wait_f 153 | - _dispatch_async_f 154 | - _dispatch_barrier_async 155 | - _dispatch_barrier_async_and_wait 156 | - _dispatch_barrier_async_and_wait_f 157 | - _dispatch_barrier_async_f 158 | - _dispatch_barrier_sync 159 | - _dispatch_barrier_sync_f 160 | - _dispatch_block_cancel 161 | - _dispatch_block_create 162 | - _dispatch_block_create_with_qos_class 163 | - _dispatch_block_notify 164 | - _dispatch_block_perform 165 | - _dispatch_block_testcancel 166 | - _dispatch_block_wait 167 | - _dispatch_data_apply 168 | - _dispatch_data_copy_region 169 | - _dispatch_data_create 170 | - _dispatch_data_create_concat 171 | - _dispatch_data_create_map 172 | - _dispatch_data_create_subrange 173 | - _dispatch_data_get_size 174 | - _dispatch_get_context 175 | - _dispatch_get_current_queue 176 | - _dispatch_get_global_queue 177 | - _dispatch_get_specific 178 | - _dispatch_group_async 179 | - _dispatch_group_async_f 180 | - _dispatch_group_create 181 | - _dispatch_group_enter 182 | - _dispatch_group_leave 183 | - _dispatch_group_notify 184 | - _dispatch_group_notify_f 185 | - _dispatch_group_wait 186 | - _dispatch_main 187 | - _dispatch_once 188 | - _dispatch_once_f 189 | - _dispatch_queue_attr_make_initially_inactive 190 | - _dispatch_queue_attr_make_with_autorelease_frequency 191 | - _dispatch_queue_attr_make_with_qos_class 192 | - _dispatch_queue_create 193 | - _dispatch_queue_create_with_target 194 | - _dispatch_queue_create_with_target$V2 195 | - _dispatch_queue_get_label 196 | - _dispatch_queue_get_qos_class 197 | - _dispatch_queue_get_specific 198 | - _dispatch_queue_set_specific 199 | - _dispatch_release 200 | - _dispatch_resume 201 | - _dispatch_retain 202 | - _dispatch_semaphore_create 203 | - _dispatch_semaphore_signal 204 | - _dispatch_semaphore_wait 205 | - _dispatch_set_context 206 | - _dispatch_set_finalizer_f 207 | - _dispatch_set_qos_class_floor 208 | - _dispatch_set_target_queue 209 | - _dispatch_source_cancel 210 | - _dispatch_source_create 211 | - _dispatch_source_get_data 212 | - _dispatch_source_get_handle 213 | - _dispatch_source_get_mask 214 | - _dispatch_source_merge_data 215 | - _dispatch_source_set_cancel_handler 216 | - _dispatch_source_set_cancel_handler_f 217 | - _dispatch_source_set_event_handler 218 | - _dispatch_source_set_event_handler_f 219 | - _dispatch_source_set_registration_handler 220 | - _dispatch_source_set_registration_handler_f 221 | - _dispatch_source_set_timer 222 | - _dispatch_source_testcancel 223 | - _dispatch_suspend 224 | - _dispatch_sync 225 | - _dispatch_sync_f 226 | - _dispatch_time 227 | - _dispatch_walltime 228 | - _dispatch_workloop_create 229 | - _dispatch_workloop_create_inactive 230 | - _dispatch_workloop_set_autorelease_frequency 231 | - __dispatch_data_destructor_free 232 | - __dispatch_data_destructor_munmap 233 | - __dispatch_data_empty 234 | - __dispatch_main_q 235 | - __dispatch_queue_attr_concurrent 236 | - __dispatch_source_type_data_add 237 | - __dispatch_source_type_data_or 238 | - __dispatch_source_type_data_replace 239 | - __dispatch_source_type_mach_send 240 | - __dispatch_source_type_memorypressure 241 | - __dispatch_source_type_proc 242 | - __dispatch_source_type_read 243 | - __dispatch_source_type_timer 244 | - __dispatch_source_type_vnode 245 | - __dispatch_source_type_write 246 | - name: libc 247 | install_name: /usr/lib/libSystem.B.dylib 248 | - name: libm 249 | install_name: /usr/lib/libSystem.B.dylib 250 | - name: libresolv 251 | install_name: /usr/lib/libresolv.9.dylib 252 | - name: libiconv 253 | install_name: /usr/lib/libiconv.2.dylib 254 | # TODO: More 255 | frameworks: 256 | - Accelerate 257 | - Accessibility 258 | - Accounts 259 | - AddressBook 260 | - AddressBookUI 261 | - AdServices 262 | - AdSupport 263 | - AppClip 264 | - AppTrackingTransparency 265 | - ARKit 266 | - AssetsLibrary 267 | - AudioToolbox 268 | - AudioUnit 269 | - AuthenticationServices 270 | - AutomaticAssessmentConfiguration 271 | - AVFAudio 272 | - name: AVFoundation 273 | symbols: 274 | - _AVMediaTypeVideo 275 | - _AVMediaTypeAudio 276 | - _AVMediaTypeText 277 | - _AVMediaTypeClosedCaption 278 | - _AVMediaTypeSubtitle 279 | - _AVMediaTypeTimecode 280 | - _AVMediaTypeMetadata 281 | - _AVMediaTypeMuxed 282 | 283 | - _AVVideoRangeSDR 284 | - _AVVideoRangeHLG 285 | - _AVVideoRangePQ 286 | - _AVMediaTypeMetadataObject 287 | - _AVMediaTypeDepthData 288 | 289 | - _AVMediaCharacteristicVisual 290 | - _AVMediaCharacteristicAudible 291 | - _AVMediaCharacteristicLegible 292 | - _AVMediaCharacteristicFrameBased 293 | - _AVMediaCharacteristicUsesWideGamutColorSpace 294 | - _AVMediaCharacteristicContainsHDRVideo 295 | - _AVMediaCharacteristicContainsAlphaChannel 296 | - _AVMediaCharacteristicIsMainProgramContent 297 | - _AVMediaCharacteristicIsAuxiliaryContent 298 | - _AVMediaCharacteristicIsOriginalContent 299 | - _AVMediaCharacteristicContainsOnlyForcedSubtitles 300 | - _AVMediaCharacteristicTranscribesSpokenDialogForAccessibility 301 | - _AVMediaCharacteristicDescribesMusicAndSoundForAccessibility 302 | - _AVMediaCharacteristicEasyToRead 303 | - _AVMediaCharacteristicDescribesVideoForAccessibility 304 | - _AVMediaCharacteristicLanguageTranslation 305 | - _AVMediaCharacteristicDubbedTranslation 306 | - _AVMediaCharacteristicVoiceOverTranslation 307 | 308 | - _AVMetadataFormatQuickTimeUserData 309 | - _AVMetadataFormatISOUserData 310 | - _AVMetadataFormatQuickTimeMetadata 311 | - _AVMetadataFormatiTunesMetadata 312 | - _AVMetadataFormatID3Metadata 313 | - _AVMetadataFormatHLSMetadata 314 | - _AVMetadataFormatUnknown 315 | 316 | - _AVMetadataKeySpaceCommon 317 | - _AVMetadataKeySpaceQuickTimeUserData 318 | - _AVMetadataKeySpaceISOUserData 319 | - _AVMetadataKeySpaceQuickTimeMetadata 320 | - _AVMetadataKeySpaceiTunes 321 | - _AVMetadataKeySpaceID3 322 | - _AVMetadataKeySpaceIcy 323 | - _AVMetadataKeySpaceHLSDateRange 324 | - _AVMetadataKeySpaceAudioFile 325 | 326 | - _AVMetadataCommonKeyTitle 327 | - _AVMetadataCommonKeyCreator 328 | - _AVMetadataCommonKeySubject 329 | - _AVMetadataCommonKeyDescription 330 | - _AVMetadataCommonKeyPublisher 331 | - _AVMetadataCommonKeyContributor 332 | - _AVMetadataCommonKeyCreationDate 333 | - _AVMetadataCommonKeyLastModifiedDate 334 | - _AVMetadataCommonKeyType 335 | - _AVMetadataCommonKeyFormat 336 | - _AVMetadataCommonKeyIdentifier 337 | - _AVMetadataCommonKeySource 338 | - _AVMetadataCommonKeyLanguage 339 | - _AVMetadataCommonKeyRelation 340 | - _AVMetadataCommonKeyLocation 341 | - _AVMetadataCommonKeyCopyrights 342 | - _AVMetadataCommonKeyAlbumName 343 | - _AVMetadataCommonKeyAuthor 344 | - _AVMetadataCommonKeyArtist 345 | - _AVMetadataCommonKeyArtwork 346 | - _AVMetadataCommonKeyMake 347 | - _AVMetadataCommonKeyModel 348 | - _AVMetadataCommonKeySoftware 349 | - _AVMetadataCommonKeyAccessibilityDescription 350 | - _AVMetadataQuickTimeUserDataKeyAlbum 351 | - _AVMetadataQuickTimeUserDataKeyArranger 352 | - _AVMetadataQuickTimeUserDataKeyArtist 353 | - _AVMetadataQuickTimeUserDataKeyAuthor 354 | - _AVMetadataQuickTimeUserDataKeyChapter 355 | - _AVMetadataQuickTimeUserDataKeyComment 356 | - _AVMetadataQuickTimeUserDataKeyComposer 357 | - _AVMetadataQuickTimeUserDataKeyCopyright 358 | - _AVMetadataQuickTimeUserDataKeyCreationDate 359 | - _AVMetadataQuickTimeUserDataKeyDescription 360 | - _AVMetadataQuickTimeUserDataKeyDirector 361 | - _AVMetadataQuickTimeUserDataKeyDisclaimer 362 | - _AVMetadataQuickTimeUserDataKeyEncodedBy 363 | - _AVMetadataQuickTimeUserDataKeyFullName 364 | - _AVMetadataQuickTimeUserDataKeyGenre 365 | - _AVMetadataQuickTimeUserDataKeyHostComputer 366 | - _AVMetadataQuickTimeUserDataKeyInformation 367 | - _AVMetadataQuickTimeUserDataKeyKeywords 368 | - _AVMetadataQuickTimeUserDataKeyMake 369 | - _AVMetadataQuickTimeUserDataKeyModel 370 | - _AVMetadataQuickTimeUserDataKeyOriginalArtist 371 | - _AVMetadataQuickTimeUserDataKeyOriginalFormat 372 | - _AVMetadataQuickTimeUserDataKeyOriginalSource 373 | - _AVMetadataQuickTimeUserDataKeyPerformers 374 | - _AVMetadataQuickTimeUserDataKeyProducer 375 | - _AVMetadataQuickTimeUserDataKeyPublisher 376 | - _AVMetadataQuickTimeUserDataKeyProduct 377 | - _AVMetadataQuickTimeUserDataKeySoftware 378 | - _AVMetadataQuickTimeUserDataKeySpecialPlaybackRequirements 379 | - _AVMetadataQuickTimeUserDataKeyTrack 380 | - _AVMetadataQuickTimeUserDataKeyWarning 381 | - _AVMetadataQuickTimeUserDataKeyWriter 382 | - _AVMetadataQuickTimeUserDataKeyURLLink 383 | - _AVMetadataQuickTimeUserDataKeyLocationISO6709 384 | - _AVMetadataQuickTimeUserDataKeyTrackName 385 | - _AVMetadataQuickTimeUserDataKeyCredits 386 | - _AVMetadataQuickTimeUserDataKeyPhonogramRights 387 | - _AVMetadataQuickTimeUserDataKeyTaggedCharacteristic 388 | - _AVMetadataQuickTimeUserDataKeyAccessibilityDescription 389 | - _AVMetadataISOUserDataKeyCopyright 390 | - _AVMetadataISOUserDataKeyTaggedCharacteristic 391 | - _AVMetadataISOUserDataKeyDate 392 | - _AVMetadataISOUserDataKeyAccessibilityDescription 393 | - _AVMetadata3GPUserDataKeyCopyright 394 | - _AVMetadata3GPUserDataKeyAuthor 395 | - _AVMetadata3GPUserDataKeyPerformer 396 | - _AVMetadata3GPUserDataKeyGenre 397 | - _AVMetadata3GPUserDataKeyRecordingYear 398 | - _AVMetadata3GPUserDataKeyLocation 399 | - _AVMetadata3GPUserDataKeyTitle 400 | - _AVMetadata3GPUserDataKeyDescription 401 | - _AVMetadata3GPUserDataKeyCollection 402 | - _AVMetadata3GPUserDataKeyUserRating 403 | - _AVMetadata3GPUserDataKeyThumbnail 404 | - _AVMetadata3GPUserDataKeyAlbumAndTrack 405 | - _AVMetadata3GPUserDataKeyKeywordList 406 | - _AVMetadata3GPUserDataKeyMediaClassification 407 | - _AVMetadata3GPUserDataKeyMediaRating 408 | - _AVMetadataQuickTimeMetadataKeyAuthor 409 | - _AVMetadataQuickTimeMetadataKeyComment 410 | - _AVMetadataQuickTimeMetadataKeyCopyright 411 | - _AVMetadataQuickTimeMetadataKeyCreationDate 412 | - _AVMetadataQuickTimeMetadataKeyDirector 413 | - _AVMetadataQuickTimeMetadataKeyDisplayName 414 | - _AVMetadataQuickTimeMetadataKeyInformation 415 | - _AVMetadataQuickTimeMetadataKeyKeywords 416 | - _AVMetadataQuickTimeMetadataKeyProducer 417 | - _AVMetadataQuickTimeMetadataKeyPublisher 418 | - _AVMetadataQuickTimeMetadataKeyAlbum 419 | - _AVMetadataQuickTimeMetadataKeyArtist 420 | - _AVMetadataQuickTimeMetadataKeyArtwork 421 | - _AVMetadataQuickTimeMetadataKeyDescription 422 | - _AVMetadataQuickTimeMetadataKeySoftware 423 | - _AVMetadataQuickTimeMetadataKeyYear 424 | - _AVMetadataQuickTimeMetadataKeyGenre 425 | - _AVMetadataQuickTimeMetadataKeyiXML 426 | - _AVMetadataQuickTimeMetadataKeyLocationISO6709 427 | - _AVMetadataQuickTimeMetadataKeyMake 428 | - _AVMetadataQuickTimeMetadataKeyModel 429 | - _AVMetadataQuickTimeMetadataKeyArranger 430 | - _AVMetadataQuickTimeMetadataKeyEncodedBy 431 | - _AVMetadataQuickTimeMetadataKeyOriginalArtist 432 | - _AVMetadataQuickTimeMetadataKeyPerformer 433 | - _AVMetadataQuickTimeMetadataKeyComposer 434 | - _AVMetadataQuickTimeMetadataKeyCredits 435 | - _AVMetadataQuickTimeMetadataKeyPhonogramRights 436 | - _AVMetadataQuickTimeMetadataKeyCameraIdentifier 437 | - _AVMetadataQuickTimeMetadataKeyCameraFrameReadoutTime 438 | - _AVMetadataQuickTimeMetadataKeyTitle 439 | - _AVMetadataQuickTimeMetadataKeyCollectionUser 440 | - _AVMetadataQuickTimeMetadataKeyRatingUser 441 | - _AVMetadataQuickTimeMetadataKeyLocationName 442 | - _AVMetadataQuickTimeMetadataKeyLocationBody 443 | - _AVMetadataQuickTimeMetadataKeyLocationNote 444 | - _AVMetadataQuickTimeMetadataKeyLocationRole 445 | - _AVMetadataQuickTimeMetadataKeyLocationDate 446 | - _AVMetadataQuickTimeMetadataKeyDirectionFacing 447 | - _AVMetadataQuickTimeMetadataKeyDirectionMotion 448 | - _AVMetadataQuickTimeMetadataKeyContentIdentifier 449 | - _AVMetadataQuickTimeMetadataKeyAccessibilityDescription 450 | - _AVMetadataQuickTimeMetadataKeyIsMontage 451 | - _AVMetadataiTunesMetadataKeyAlbum 452 | - _AVMetadataiTunesMetadataKeyArtist 453 | - _AVMetadataiTunesMetadataKeyUserComment 454 | - _AVMetadataiTunesMetadataKeyCoverArt 455 | - _AVMetadataiTunesMetadataKeyCopyright 456 | - _AVMetadataiTunesMetadataKeyReleaseDate 457 | - _AVMetadataiTunesMetadataKeyEncodedBy 458 | - _AVMetadataiTunesMetadataKeyPredefinedGenre 459 | - _AVMetadataiTunesMetadataKeyUserGenre 460 | - _AVMetadataiTunesMetadataKeySongName 461 | - _AVMetadataiTunesMetadataKeyTrackSubTitle 462 | - _AVMetadataiTunesMetadataKeyEncodingTool 463 | - _AVMetadataiTunesMetadataKeyComposer 464 | - _AVMetadataiTunesMetadataKeyAlbumArtist 465 | - _AVMetadataiTunesMetadataKeyAccountKind 466 | - _AVMetadataiTunesMetadataKeyAppleID 467 | - _AVMetadataiTunesMetadataKeyArtistID 468 | - _AVMetadataiTunesMetadataKeySongID 469 | - _AVMetadataiTunesMetadataKeyDiscCompilation 470 | - _AVMetadataiTunesMetadataKeyDiscNumber 471 | - _AVMetadataiTunesMetadataKeyGenreID 472 | - _AVMetadataiTunesMetadataKeyGrouping 473 | - _AVMetadataiTunesMetadataKeyPlaylistID 474 | - _AVMetadataiTunesMetadataKeyContentRating 475 | - _AVMetadataiTunesMetadataKeyBeatsPerMin 476 | - _AVMetadataiTunesMetadataKeyTrackNumber 477 | - _AVMetadataiTunesMetadataKeyArtDirector 478 | - _AVMetadataiTunesMetadataKeyArranger 479 | - _AVMetadataiTunesMetadataKeyAuthor 480 | - _AVMetadataiTunesMetadataKeyLyrics 481 | - _AVMetadataiTunesMetadataKeyAcknowledgement 482 | - _AVMetadataiTunesMetadataKeyConductor 483 | - _AVMetadataiTunesMetadataKeyDescription 484 | - _AVMetadataiTunesMetadataKeyDirector 485 | - _AVMetadataiTunesMetadataKeyEQ 486 | - _AVMetadataiTunesMetadataKeyLinerNotes 487 | - _AVMetadataiTunesMetadataKeyRecordCompany 488 | - _AVMetadataiTunesMetadataKeyOriginalArtist 489 | - _AVMetadataiTunesMetadataKeyPhonogramRights 490 | - _AVMetadataiTunesMetadataKeyProducer 491 | - _AVMetadataiTunesMetadataKeyPerformer 492 | - _AVMetadataiTunesMetadataKeyPublisher 493 | - _AVMetadataiTunesMetadataKeySoundEngineer 494 | - _AVMetadataiTunesMetadataKeySoloist 495 | - _AVMetadataiTunesMetadataKeyCredits 496 | - _AVMetadataiTunesMetadataKeyThanks 497 | - _AVMetadataiTunesMetadataKeyOnlineExtras 498 | - _AVMetadataiTunesMetadataKeyExecProducer 499 | - _AVMetadataID3MetadataKeyAudioEncryption 500 | - _AVMetadataID3MetadataKeyAttachedPicture 501 | - _AVMetadataID3MetadataKeyAudioSeekPointIndex 502 | - _AVMetadataID3MetadataKeyComments 503 | - _AVMetadataID3MetadataKeyCommercial 504 | - _AVMetadataID3MetadataKeyCommerical 505 | - _AVMetadataID3MetadataKeyEncryption 506 | - _AVMetadataID3MetadataKeyEqualization 507 | - _AVMetadataID3MetadataKeyEqualization2 508 | - _AVMetadataID3MetadataKeyEventTimingCodes 509 | - _AVMetadataID3MetadataKeyGeneralEncapsulatedObject 510 | - _AVMetadataID3MetadataKeyGroupIdentifier 511 | - _AVMetadataID3MetadataKeyInvolvedPeopleList_v23 512 | - _AVMetadataID3MetadataKeyLink 513 | - _AVMetadataID3MetadataKeyMusicCDIdentifier 514 | - _AVMetadataID3MetadataKeyMPEGLocationLookupTable 515 | - _AVMetadataID3MetadataKeyOwnership 516 | - _AVMetadataID3MetadataKeyPrivate 517 | - _AVMetadataID3MetadataKeyPlayCounter 518 | - _AVMetadataID3MetadataKeyPopularimeter 519 | - _AVMetadataID3MetadataKeyPositionSynchronization 520 | - _AVMetadataID3MetadataKeyRecommendedBufferSize 521 | - _AVMetadataID3MetadataKeyRelativeVolumeAdjustment 522 | - _AVMetadataID3MetadataKeyRelativeVolumeAdjustment2 523 | - _AVMetadataID3MetadataKeyReverb 524 | - _AVMetadataID3MetadataKeySeek 525 | - _AVMetadataID3MetadataKeySignature 526 | - _AVMetadataID3MetadataKeySynchronizedLyric 527 | - _AVMetadataID3MetadataKeySynchronizedTempoCodes 528 | - _AVMetadataID3MetadataKeyAlbumTitle 529 | - _AVMetadataID3MetadataKeyBeatsPerMinute 530 | - _AVMetadataID3MetadataKeyComposer 531 | - _AVMetadataID3MetadataKeyContentType 532 | - _AVMetadataID3MetadataKeyCopyright 533 | - _AVMetadataID3MetadataKeyDate 534 | - _AVMetadataID3MetadataKeyEncodingTime 535 | - _AVMetadataID3MetadataKeyPlaylistDelay 536 | - _AVMetadataID3MetadataKeyOriginalReleaseTime 537 | - _AVMetadataID3MetadataKeyRecordingTime 538 | - _AVMetadataID3MetadataKeyReleaseTime 539 | - _AVMetadataID3MetadataKeyTaggingTime 540 | - _AVMetadataID3MetadataKeyEncodedBy 541 | - _AVMetadataID3MetadataKeyLyricist 542 | - _AVMetadataID3MetadataKeyFileType 543 | - _AVMetadataID3MetadataKeyTime 544 | - _AVMetadataID3MetadataKeyInvolvedPeopleList_v24 545 | - _AVMetadataID3MetadataKeyContentGroupDescription 546 | - _AVMetadataID3MetadataKeyTitleDescription 547 | - _AVMetadataID3MetadataKeySubTitle 548 | - _AVMetadataID3MetadataKeyInitialKey 549 | - _AVMetadataID3MetadataKeyLanguage 550 | - _AVMetadataID3MetadataKeyLength 551 | - _AVMetadataID3MetadataKeyMusicianCreditsList 552 | - _AVMetadataID3MetadataKeyMediaType 553 | - _AVMetadataID3MetadataKeyMood 554 | - _AVMetadataID3MetadataKeyOriginalAlbumTitle 555 | - _AVMetadataID3MetadataKeyOriginalFilename 556 | - _AVMetadataID3MetadataKeyOriginalLyricist 557 | - _AVMetadataID3MetadataKeyOriginalArtist 558 | - _AVMetadataID3MetadataKeyOriginalReleaseYear 559 | - _AVMetadataID3MetadataKeyFileOwner 560 | - _AVMetadataID3MetadataKeyLeadPerformer 561 | - _AVMetadataID3MetadataKeyBand 562 | - _AVMetadataID3MetadataKeyConductor 563 | - _AVMetadataID3MetadataKeyModifiedBy 564 | - _AVMetadataID3MetadataKeyPartOfASet 565 | - _AVMetadataID3MetadataKeyProducedNotice 566 | - _AVMetadataID3MetadataKeyPublisher 567 | - _AVMetadataID3MetadataKeyTrackNumber 568 | - _AVMetadataID3MetadataKeyRecordingDates 569 | - _AVMetadataID3MetadataKeyInternetRadioStationName 570 | - _AVMetadataID3MetadataKeyInternetRadioStationOwner 571 | - _AVMetadataID3MetadataKeySize 572 | - _AVMetadataID3MetadataKeyAlbumSortOrder 573 | - _AVMetadataID3MetadataKeyPerformerSortOrder 574 | - _AVMetadataID3MetadataKeyTitleSortOrder 575 | - _AVMetadataID3MetadataKeyInternationalStandardRecordingCode 576 | - _AVMetadataID3MetadataKeyEncodedWith 577 | - _AVMetadataID3MetadataKeySetSubtitle 578 | - _AVMetadataID3MetadataKeyYear 579 | - _AVMetadataID3MetadataKeyUserText 580 | - _AVMetadataID3MetadataKeyUniqueFileIdentifier 581 | - _AVMetadataID3MetadataKeyTermsOfUse 582 | - _AVMetadataID3MetadataKeyUnsynchronizedLyric 583 | - _AVMetadataID3MetadataKeyCommercialInformation 584 | - _AVMetadataID3MetadataKeyCopyrightInformation 585 | - _AVMetadataID3MetadataKeyOfficialAudioFileWebpage 586 | - _AVMetadataID3MetadataKeyOfficialArtistWebpage 587 | - _AVMetadataID3MetadataKeyOfficialAudioSourceWebpage 588 | - _AVMetadataID3MetadataKeyOfficialInternetRadioStationHomepage 589 | - _AVMetadataID3MetadataKeyPayment 590 | - _AVMetadataID3MetadataKeyOfficialPublisherWebpage 591 | - _AVMetadataID3MetadataKeyUserURL 592 | - _AVMetadataIcyMetadataKeyStreamTitle 593 | - _AVMetadataIcyMetadataKeyStreamURL 594 | 595 | - _AVMetadataExtraAttributeValueURIKey 596 | - _AVMetadataExtraAttributeBaseURIKey 597 | - _AVMetadataExtraAttributeInfoKey 598 | 599 | - _AVMetadataCommonIdentifierTitle 600 | - _AVMetadataCommonIdentifierCreator 601 | - _AVMetadataCommonIdentifierSubject 602 | - _AVMetadataCommonIdentifierDescription 603 | - _AVMetadataCommonIdentifierPublisher 604 | - _AVMetadataCommonIdentifierContributor 605 | - _AVMetadataCommonIdentifierCreationDate 606 | - _AVMetadataCommonIdentifierLastModifiedDate 607 | - _AVMetadataCommonIdentifierType 608 | - _AVMetadataCommonIdentifierFormat 609 | - _AVMetadataCommonIdentifierAssetIdentifier 610 | - _AVMetadataCommonIdentifierSource 611 | - _AVMetadataCommonIdentifierLanguage 612 | - _AVMetadataCommonIdentifierRelation 613 | - _AVMetadataCommonIdentifierLocation 614 | - _AVMetadataCommonIdentifierCopyrights 615 | - _AVMetadataCommonIdentifierAlbumName 616 | - _AVMetadataCommonIdentifierAuthor 617 | - _AVMetadataCommonIdentifierArtist 618 | - _AVMetadataCommonIdentifierArtwork 619 | - _AVMetadataCommonIdentifierMake 620 | - _AVMetadataCommonIdentifierModel 621 | - _AVMetadataCommonIdentifierSoftware 622 | - _AVMetadataCommonIdentifierAccessibilityDescription 623 | - _AVMetadataIdentifierQuickTimeUserDataAlbum 624 | - _AVMetadataIdentifierQuickTimeUserDataArranger 625 | - _AVMetadataIdentifierQuickTimeUserDataArtist 626 | - _AVMetadataIdentifierQuickTimeUserDataAuthor 627 | - _AVMetadataIdentifierQuickTimeUserDataChapter 628 | - _AVMetadataIdentifierQuickTimeUserDataComment 629 | - _AVMetadataIdentifierQuickTimeUserDataComposer 630 | - _AVMetadataIdentifierQuickTimeUserDataCopyright 631 | - _AVMetadataIdentifierQuickTimeUserDataCreationDate 632 | - _AVMetadataIdentifierQuickTimeUserDataDescription 633 | - _AVMetadataIdentifierQuickTimeUserDataDirector 634 | - _AVMetadataIdentifierQuickTimeUserDataDisclaimer 635 | - _AVMetadataIdentifierQuickTimeUserDataEncodedBy 636 | - _AVMetadataIdentifierQuickTimeUserDataFullName 637 | - _AVMetadataIdentifierQuickTimeUserDataGenre 638 | - _AVMetadataIdentifierQuickTimeUserDataHostComputer 639 | - _AVMetadataIdentifierQuickTimeUserDataInformation 640 | - _AVMetadataIdentifierQuickTimeUserDataKeywords 641 | - _AVMetadataIdentifierQuickTimeUserDataMake 642 | - _AVMetadataIdentifierQuickTimeUserDataModel 643 | - _AVMetadataIdentifierQuickTimeUserDataOriginalArtist 644 | - _AVMetadataIdentifierQuickTimeUserDataOriginalFormat 645 | - _AVMetadataIdentifierQuickTimeUserDataOriginalSource 646 | - _AVMetadataIdentifierQuickTimeUserDataPerformers 647 | - _AVMetadataIdentifierQuickTimeUserDataProducer 648 | - _AVMetadataIdentifierQuickTimeUserDataPublisher 649 | - _AVMetadataIdentifierQuickTimeUserDataProduct 650 | - _AVMetadataIdentifierQuickTimeUserDataSoftware 651 | - _AVMetadataIdentifierQuickTimeUserDataSpecialPlaybackRequirements 652 | - _AVMetadataIdentifierQuickTimeUserDataTrack 653 | - _AVMetadataIdentifierQuickTimeUserDataWarning 654 | - _AVMetadataIdentifierQuickTimeUserDataWriter 655 | - _AVMetadataIdentifierQuickTimeUserDataURLLink 656 | - _AVMetadataIdentifierQuickTimeUserDataLocationISO6709 657 | - _AVMetadataIdentifierQuickTimeUserDataTrackName 658 | - _AVMetadataIdentifierQuickTimeUserDataCredits 659 | - _AVMetadataIdentifierQuickTimeUserDataPhonogramRights 660 | - _AVMetadataIdentifierQuickTimeUserDataTaggedCharacteristic 661 | - _AVMetadataIdentifierQuickTimeUserDataAccessibilityDescription 662 | - _AVMetadataIdentifierISOUserDataCopyright 663 | - _AVMetadataIdentifierISOUserDataDate 664 | - _AVMetadataIdentifierISOUserDataTaggedCharacteristic 665 | - _AVMetadataIdentifierISOUserDataAccessibilityDescription 666 | - _AVMetadataIdentifier3GPUserDataCopyright 667 | - _AVMetadataIdentifier3GPUserDataAuthor 668 | - _AVMetadataIdentifier3GPUserDataPerformer 669 | - _AVMetadataIdentifier3GPUserDataGenre 670 | - _AVMetadataIdentifier3GPUserDataRecordingYear 671 | - _AVMetadataIdentifier3GPUserDataLocation 672 | - _AVMetadataIdentifier3GPUserDataTitle 673 | - _AVMetadataIdentifier3GPUserDataDescription 674 | - _AVMetadataIdentifier3GPUserDataCollection 675 | - _AVMetadataIdentifier3GPUserDataUserRating 676 | - _AVMetadataIdentifier3GPUserDataThumbnail 677 | - _AVMetadataIdentifier3GPUserDataAlbumAndTrack 678 | - _AVMetadataIdentifier3GPUserDataKeywordList 679 | - _AVMetadataIdentifier3GPUserDataMediaClassification 680 | - _AVMetadataIdentifier3GPUserDataMediaRating 681 | - _AVMetadataIdentifierQuickTimeMetadataAuthor 682 | - _AVMetadataIdentifierQuickTimeMetadataComment 683 | - _AVMetadataIdentifierQuickTimeMetadataCopyright 684 | - _AVMetadataIdentifierQuickTimeMetadataCreationDate 685 | - _AVMetadataIdentifierQuickTimeMetadataDirector 686 | - _AVMetadataIdentifierQuickTimeMetadataDisplayName 687 | - _AVMetadataIdentifierQuickTimeMetadataInformation 688 | - _AVMetadataIdentifierQuickTimeMetadataKeywords 689 | - _AVMetadataIdentifierQuickTimeMetadataProducer 690 | - _AVMetadataIdentifierQuickTimeMetadataPublisher 691 | - _AVMetadataIdentifierQuickTimeMetadataAlbum 692 | - _AVMetadataIdentifierQuickTimeMetadataArtist 693 | - _AVMetadataIdentifierQuickTimeMetadataArtwork 694 | - _AVMetadataIdentifierQuickTimeMetadataDescription 695 | - _AVMetadataIdentifierQuickTimeMetadataSoftware 696 | - _AVMetadataIdentifierQuickTimeMetadataYear 697 | - _AVMetadataIdentifierQuickTimeMetadataGenre 698 | - _AVMetadataIdentifierQuickTimeMetadataiXML 699 | - _AVMetadataIdentifierQuickTimeMetadataLocationISO6709 700 | - _AVMetadataIdentifierQuickTimeMetadataMake 701 | - _AVMetadataIdentifierQuickTimeMetadataModel 702 | - _AVMetadataIdentifierQuickTimeMetadataArranger 703 | - _AVMetadataIdentifierQuickTimeMetadataEncodedBy 704 | - _AVMetadataIdentifierQuickTimeMetadataOriginalArtist 705 | - _AVMetadataIdentifierQuickTimeMetadataPerformer 706 | - _AVMetadataIdentifierQuickTimeMetadataComposer 707 | - _AVMetadataIdentifierQuickTimeMetadataCredits 708 | - _AVMetadataIdentifierQuickTimeMetadataPhonogramRights 709 | - _AVMetadataIdentifierQuickTimeMetadataCameraIdentifier 710 | - _AVMetadataIdentifierQuickTimeMetadataCameraFrameReadoutTime 711 | - _AVMetadataIdentifierQuickTimeMetadataTitle 712 | - _AVMetadataIdentifierQuickTimeMetadataCollectionUser 713 | - _AVMetadataIdentifierQuickTimeMetadataRatingUser 714 | - _AVMetadataIdentifierQuickTimeMetadataLocationName 715 | - _AVMetadataIdentifierQuickTimeMetadataLocationBody 716 | - _AVMetadataIdentifierQuickTimeMetadataLocationNote 717 | - _AVMetadataIdentifierQuickTimeMetadataLocationRole 718 | - _AVMetadataIdentifierQuickTimeMetadataLocationDate 719 | - _AVMetadataIdentifierQuickTimeMetadataDirectionFacing 720 | - _AVMetadataIdentifierQuickTimeMetadataDirectionMotion 721 | - _AVMetadataIdentifierQuickTimeMetadataPreferredAffineTransform 722 | - _AVMetadataIdentifierQuickTimeMetadataDetectedFace 723 | - _AVMetadataIdentifierQuickTimeMetadataDetectedHumanBody 724 | - _AVMetadataIdentifierQuickTimeMetadataDetectedCatBody 725 | - _AVMetadataIdentifierQuickTimeMetadataDetectedDogBody 726 | - _AVMetadataIdentifierQuickTimeMetadataDetectedSalientObject 727 | - _AVMetadataIdentifierQuickTimeMetadataVideoOrientation 728 | - _AVMetadataIdentifierQuickTimeMetadataContentIdentifier 729 | - _AVMetadataIdentifierQuickTimeMetadataAccessibilityDescription 730 | - _AVMetadataIdentifierQuickTimeMetadataIsMontage 731 | - _AVMetadataIdentifierQuickTimeMetadataAutoLivePhoto 732 | - _AVMetadataIdentifierQuickTimeMetadataLivePhotoVitalityScore 733 | - _AVMetadataIdentifierQuickTimeMetadataLivePhotoVitalityScoringVersion 734 | - _AVMetadataIdentifierQuickTimeMetadataSpatialOverCaptureQualityScore 735 | - _AVMetadataIdentifierQuickTimeMetadataSpatialOverCaptureQualityScoringVersion 736 | - _AVMetadataIdentifierQuickTimeMetadataLocationHorizontalAccuracyInMeters 737 | - _AVMetadataIdentifieriTunesMetadataAlbum 738 | - _AVMetadataIdentifieriTunesMetadataArtist 739 | - _AVMetadataIdentifieriTunesMetadataUserComment 740 | - _AVMetadataIdentifieriTunesMetadataCoverArt 741 | - _AVMetadataIdentifieriTunesMetadataCopyright 742 | - _AVMetadataIdentifieriTunesMetadataReleaseDate 743 | - _AVMetadataIdentifieriTunesMetadataEncodedBy 744 | - _AVMetadataIdentifieriTunesMetadataPredefinedGenre 745 | - _AVMetadataIdentifieriTunesMetadataUserGenre 746 | - _AVMetadataIdentifieriTunesMetadataSongName 747 | - _AVMetadataIdentifieriTunesMetadataTrackSubTitle 748 | - _AVMetadataIdentifieriTunesMetadataEncodingTool 749 | - _AVMetadataIdentifieriTunesMetadataComposer 750 | - _AVMetadataIdentifieriTunesMetadataAlbumArtist 751 | - _AVMetadataIdentifieriTunesMetadataAccountKind 752 | - _AVMetadataIdentifieriTunesMetadataAppleID 753 | - _AVMetadataIdentifieriTunesMetadataArtistID 754 | - _AVMetadataIdentifieriTunesMetadataSongID 755 | - _AVMetadataIdentifieriTunesMetadataDiscCompilation 756 | - _AVMetadataIdentifieriTunesMetadataDiscNumber 757 | - _AVMetadataIdentifieriTunesMetadataGenreID 758 | - _AVMetadataIdentifieriTunesMetadataGrouping 759 | - _AVMetadataIdentifieriTunesMetadataPlaylistID 760 | - _AVMetadataIdentifieriTunesMetadataContentRating 761 | - _AVMetadataIdentifieriTunesMetadataBeatsPerMin 762 | - _AVMetadataIdentifieriTunesMetadataTrackNumber 763 | - _AVMetadataIdentifieriTunesMetadataArtDirector 764 | - _AVMetadataIdentifieriTunesMetadataArranger 765 | - _AVMetadataIdentifieriTunesMetadataAuthor 766 | - _AVMetadataIdentifieriTunesMetadataLyrics 767 | - _AVMetadataIdentifieriTunesMetadataAcknowledgement 768 | - _AVMetadataIdentifieriTunesMetadataConductor 769 | - _AVMetadataIdentifieriTunesMetadataDescription 770 | - _AVMetadataIdentifieriTunesMetadataDirector 771 | - _AVMetadataIdentifieriTunesMetadataEQ 772 | - _AVMetadataIdentifieriTunesMetadataLinerNotes 773 | - _AVMetadataIdentifieriTunesMetadataRecordCompany 774 | - _AVMetadataIdentifieriTunesMetadataOriginalArtist 775 | - _AVMetadataIdentifieriTunesMetadataPhonogramRights 776 | - _AVMetadataIdentifieriTunesMetadataProducer 777 | - _AVMetadataIdentifieriTunesMetadataPerformer 778 | - _AVMetadataIdentifieriTunesMetadataPublisher 779 | - _AVMetadataIdentifieriTunesMetadataSoundEngineer 780 | - _AVMetadataIdentifieriTunesMetadataSoloist 781 | - _AVMetadataIdentifieriTunesMetadataCredits 782 | - _AVMetadataIdentifieriTunesMetadataThanks 783 | - _AVMetadataIdentifieriTunesMetadataOnlineExtras 784 | - _AVMetadataIdentifieriTunesMetadataExecProducer 785 | - _AVMetadataIdentifierID3MetadataAudioEncryption 786 | - _AVMetadataIdentifierID3MetadataAttachedPicture 787 | - _AVMetadataIdentifierID3MetadataAudioSeekPointIndex 788 | - _AVMetadataIdentifierID3MetadataComments 789 | - _AVMetadataIdentifierID3MetadataCommercial 790 | - _AVMetadataIdentifierID3MetadataCommerical 791 | - _AVMetadataIdentifierID3MetadataEncryption 792 | - _AVMetadataIdentifierID3MetadataEqualization 793 | - _AVMetadataIdentifierID3MetadataEqualization2 794 | - _AVMetadataIdentifierID3MetadataEventTimingCodes 795 | - _AVMetadataIdentifierID3MetadataGeneralEncapsulatedObject 796 | - _AVMetadataIdentifierID3MetadataGroupIdentifier 797 | - _AVMetadataIdentifierID3MetadataInvolvedPeopleList_v23 798 | - _AVMetadataIdentifierID3MetadataLink 799 | - _AVMetadataIdentifierID3MetadataMusicCDIdentifier 800 | - _AVMetadataIdentifierID3MetadataMPEGLocationLookupTable 801 | - _AVMetadataIdentifierID3MetadataOwnership 802 | - _AVMetadataIdentifierID3MetadataPrivate 803 | - _AVMetadataIdentifierID3MetadataPlayCounter 804 | - _AVMetadataIdentifierID3MetadataPopularimeter 805 | - _AVMetadataIdentifierID3MetadataPositionSynchronization 806 | - _AVMetadataIdentifierID3MetadataRecommendedBufferSize 807 | - _AVMetadataIdentifierID3MetadataRelativeVolumeAdjustment 808 | - _AVMetadataIdentifierID3MetadataRelativeVolumeAdjustment2 809 | - _AVMetadataIdentifierID3MetadataReverb 810 | - _AVMetadataIdentifierID3MetadataSeek 811 | - _AVMetadataIdentifierID3MetadataSignature 812 | - _AVMetadataIdentifierID3MetadataSynchronizedLyric 813 | - _AVMetadataIdentifierID3MetadataSynchronizedTempoCodes 814 | - _AVMetadataIdentifierID3MetadataAlbumTitle 815 | - _AVMetadataIdentifierID3MetadataBeatsPerMinute 816 | - _AVMetadataIdentifierID3MetadataComposer 817 | - _AVMetadataIdentifierID3MetadataContentType 818 | - _AVMetadataIdentifierID3MetadataCopyright 819 | - _AVMetadataIdentifierID3MetadataDate 820 | - _AVMetadataIdentifierID3MetadataEncodingTime 821 | - _AVMetadataIdentifierID3MetadataPlaylistDelay 822 | - _AVMetadataIdentifierID3MetadataOriginalReleaseTime 823 | - _AVMetadataIdentifierID3MetadataRecordingTime 824 | - _AVMetadataIdentifierID3MetadataReleaseTime 825 | - _AVMetadataIdentifierID3MetadataTaggingTime 826 | - _AVMetadataIdentifierID3MetadataEncodedBy 827 | - _AVMetadataIdentifierID3MetadataLyricist 828 | - _AVMetadataIdentifierID3MetadataFileType 829 | - _AVMetadataIdentifierID3MetadataTime 830 | - _AVMetadataIdentifierID3MetadataInvolvedPeopleList_v24 831 | - _AVMetadataIdentifierID3MetadataContentGroupDescription 832 | - _AVMetadataIdentifierID3MetadataTitleDescription 833 | - _AVMetadataIdentifierID3MetadataSubTitle 834 | - _AVMetadataIdentifierID3MetadataInitialKey 835 | - _AVMetadataIdentifierID3MetadataLanguage 836 | - _AVMetadataIdentifierID3MetadataLength 837 | - _AVMetadataIdentifierID3MetadataMusicianCreditsList 838 | - _AVMetadataIdentifierID3MetadataMediaType 839 | - _AVMetadataIdentifierID3MetadataMood 840 | - _AVMetadataIdentifierID3MetadataOriginalAlbumTitle 841 | - _AVMetadataIdentifierID3MetadataOriginalFilename 842 | - _AVMetadataIdentifierID3MetadataOriginalLyricist 843 | - _AVMetadataIdentifierID3MetadataOriginalArtist 844 | - _AVMetadataIdentifierID3MetadataOriginalReleaseYear 845 | - _AVMetadataIdentifierID3MetadataFileOwner 846 | - _AVMetadataIdentifierID3MetadataLeadPerformer 847 | - _AVMetadataIdentifierID3MetadataBand 848 | - _AVMetadataIdentifierID3MetadataConductor 849 | - _AVMetadataIdentifierID3MetadataModifiedBy 850 | - _AVMetadataIdentifierID3MetadataPartOfASet 851 | - _AVMetadataIdentifierID3MetadataProducedNotice 852 | - _AVMetadataIdentifierID3MetadataPublisher 853 | - _AVMetadataIdentifierID3MetadataTrackNumber 854 | - _AVMetadataIdentifierID3MetadataRecordingDates 855 | - _AVMetadataIdentifierID3MetadataInternetRadioStationName 856 | - _AVMetadataIdentifierID3MetadataInternetRadioStationOwner 857 | - _AVMetadataIdentifierID3MetadataSize 858 | - _AVMetadataIdentifierID3MetadataAlbumSortOrder 859 | - _AVMetadataIdentifierID3MetadataPerformerSortOrder 860 | - _AVMetadataIdentifierID3MetadataTitleSortOrder 861 | - _AVMetadataIdentifierID3MetadataInternationalStandardRecordingCode 862 | - _AVMetadataIdentifierID3MetadataEncodedWith 863 | - _AVMetadataIdentifierID3MetadataSetSubtitle 864 | - _AVMetadataIdentifierID3MetadataYear 865 | - _AVMetadataIdentifierID3MetadataUserText 866 | - _AVMetadataIdentifierID3MetadataUniqueFileIdentifier 867 | - _AVMetadataIdentifierID3MetadataTermsOfUse 868 | - _AVMetadataIdentifierID3MetadataUnsynchronizedLyric 869 | - _AVMetadataIdentifierID3MetadataCommercialInformation 870 | - _AVMetadataIdentifierID3MetadataCopyrightInformation 871 | - _AVMetadataIdentifierID3MetadataOfficialAudioFileWebpage 872 | - _AVMetadataIdentifierID3MetadataOfficialArtistWebpage 873 | - _AVMetadataIdentifierID3MetadataOfficialAudioSourceWebpage 874 | - _AVMetadataIdentifierID3MetadataOfficialInternetRadioStationHomepage 875 | - _AVMetadataIdentifierID3MetadataPayment 876 | - _AVMetadataIdentifierID3MetadataOfficialPublisherWebpage 877 | - _AVMetadataIdentifierID3MetadataUserURL 878 | - _AVMetadataIdentifierIcyMetadataStreamTitle 879 | - _AVMetadataIdentifierIcyMetadataStreamURL 880 | 881 | - _AVCoreAnimationBeginTimeAtZero 882 | 883 | - _AVLayerVideoGravityResizeAspect 884 | - _AVLayerVideoGravityResizeAspectFill 885 | - _AVLayerVideoGravityResize 886 | 887 | - _AVCaptureDeviceTypeExternalUnknown 888 | - _AVCaptureDeviceTypeBuiltInMicrophone 889 | - _AVCaptureDeviceTypeBuiltInWideAngleCamera 890 | - _AVCaptureDeviceTypeBuiltInTelephotoCamera 891 | - _AVCaptureDeviceTypeBuiltInUltraWideCamera 892 | - _AVCaptureDeviceTypeBuiltInDualCamera 893 | - _AVCaptureDeviceTypeBuiltInDualWideCamera 894 | - _AVCaptureDeviceTypeBuiltInTripleCamera 895 | - _AVCaptureDeviceTypeBuiltInTrueDepthCamera 896 | - _AVCaptureDeviceTypeBuiltInLiDARDepthCamera 897 | - _AVCaptureDeviceTypeBuiltInDuoCamera 898 | 899 | - AVKit 900 | - BackgroundTasks 901 | - BusinessChat 902 | - CallKit 903 | - CarPlay 904 | - CellularDataDiagnosticsSuite 905 | - CFNetwork 906 | - CHIP 907 | - ClassKit 908 | - ClockKit 909 | - CloudKit 910 | - Combine 911 | - Contacts 912 | - ContactsUI 913 | - CoreAudio 914 | - CoreAudioKit 915 | - CoreAudioTypes 916 | - CoreBluetooth 917 | - CoreData 918 | - name: CoreFoundation 919 | symbols: 920 | - _CFAbsoluteTimeGetCurrent 921 | - _CFRelease 922 | - _CFRunLoopAddObserver 923 | - _CFRunLoopAddSource 924 | - _CFRunLoopAddTimer 925 | - _CFRunLoopGetMain 926 | - _CFRunLoopObserverCreate 927 | - _CFRunLoopSourceCreate 928 | - _CFRunLoopSourceInvalidate 929 | - _CFRunLoopTimerCreate 930 | - _CFRunLoopTimerInvalidate 931 | - _CFRunLoopTimerSetNextFireDate 932 | - _CFRunLoopWakeUp 933 | - _kCFRunLoopCommonModes 934 | - _kCFRunLoopDefaultMode 935 | - CoreGraphics 936 | - CoreHaptics 937 | - CoreImage 938 | - CoreLocation 939 | - CoreLocationUI 940 | - CoreMedia 941 | - CoreMIDI 942 | - CoreML 943 | - CoreMotion 944 | - CoreNFC 945 | - CoreServices 946 | - CoreSpotlight 947 | - CoreTelephony 948 | - CoreText 949 | - CoreVideo 950 | - CreateML 951 | - CryptoKit 952 | - CryptoTokenKit 953 | - DataDetection 954 | - DeveloperToolsSupport 955 | - DeviceActivity 956 | - DeviceCheck 957 | - EventKit 958 | - EventKitUI 959 | - ExposureNotification 960 | - ExternalAccessory 961 | - FamilyControls 962 | - FileProvider 963 | - FileProviderUI 964 | - name: Foundation 965 | symbols: 966 | - _NSLog 967 | - GameController 968 | - GameKit 969 | - GameplayKit 970 | - GLKit 971 | - GroupActivities 972 | - GSS 973 | - HealthKit 974 | - HealthKitUI 975 | - HomeKit 976 | - iAd 977 | - IdentityLookup 978 | - IdentityLookupUI 979 | - ImageCaptureCore 980 | - ImageIO 981 | - Intents 982 | - IntentsUI 983 | - IOKit 984 | - IOSurface 985 | - JavaScriptCore 986 | - LinkPresentation 987 | - LocalAuthentication 988 | - ManagedSettings 989 | - ManagedSettingsUI 990 | - MapKit 991 | - MediaAccessibility 992 | - MediaPlayer 993 | - MediaSetup 994 | - MediaToolbox 995 | - Messages 996 | - MessageUI 997 | - name: Metal 998 | symbols: 999 | - _MTLCreateSystemDefaultDevice 1000 | - MetalKit 1001 | - MetalPerformanceShaders 1002 | - MetalPerformanceShadersGraph 1003 | - MetricKit 1004 | - MLCompute 1005 | - MobileCoreServices 1006 | - ModelIO 1007 | - MultipeerConnectivity 1008 | - MusicKit 1009 | - NaturalLanguage 1010 | - NearbyInteraction 1011 | - Network 1012 | - NetworkExtension 1013 | - NewsstandKit 1014 | - NotificationCenter 1015 | - OpenAL 1016 | - OpenGLES 1017 | - OSLog 1018 | - PassKit 1019 | - PDFKit 1020 | - PencilKit 1021 | - PHASE 1022 | - Photos 1023 | - PhotosUI 1024 | - ProximityReader 1025 | - PushKit 1026 | - QuartzCore 1027 | - QuickLook 1028 | - QuickLookThumbnailing 1029 | - RealityFoundation 1030 | - RealityKit 1031 | - ReplayKit 1032 | - SafariServices 1033 | - SceneKit 1034 | - ScreenTime 1035 | - name: Security 1036 | symbols: 1037 | - _SecRandomCopyBytes 1038 | - SensorKit 1039 | - ShazamKit 1040 | - Social 1041 | - SoundAnalysis 1042 | - Speech 1043 | - SpriteKit 1044 | - StoreKit 1045 | - SwiftUI 1046 | - SystemConfiguration 1047 | - TabularData 1048 | - ThreadNetwork 1049 | - Twitter 1050 | - name: UIKit 1051 | symbols: 1052 | - _UIApplicationMain 1053 | - _UIApplicationLaunchOptionsSourceApplicationKey 1054 | - _UIApplicationLaunchOptionsRemoteNotificationKey 1055 | - _UIApplicationLaunchOptionsAnnotationKey 1056 | - _UIApplicationLaunchOptionsLocationKey 1057 | - _UIApplicationLaunchOptionsNewsstandDownloadsKey 1058 | - _UIApplicationLaunchOptionsBluetoothCentralsKey 1059 | - _UIApplicationLaunchOptionsBluetoothPeripheralsKey 1060 | - _UIApplicationLaunchOptionsShortcutItemKey 1061 | - _UIApplicationLaunchOptionsEventAttributionKey 1062 | - _UIApplicationLaunchOptionsUserActivityDictionaryKey 1063 | - _UIApplicationLaunchOptionsUserActivityTypeKey 1064 | - _UIApplicationLaunchOptionsKey 1065 | - UniformTypeIdentifiers 1066 | - UserNotifications 1067 | - UserNotificationsUI 1068 | - VideoSubscriberAccount 1069 | - VideoToolbox 1070 | - Vision 1071 | - VisionKit 1072 | - WatchConnectivity 1073 | - WebKit 1074 | - WidgetKit -------------------------------------------------------------------------------- /simple_rust_ios_app.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | application-identifier 6 | REDACTED.rs.rust.testing-ios-rust 7 | com.apple.developer.team-identifier 8 | REDACTED 9 | get-task-allow 10 | 11 | keychain-access-groups 12 | 13 | REDACTED.* 14 | com.apple.token 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use std::sync::RwLock; 2 | 3 | use cacao::uikit::{App, AppDelegate, Scene, SceneConfig, SceneConnectionOptions, SceneSession, Window, WindowSceneDelegate}; 4 | 5 | use cacao::color::Color; 6 | use cacao::image::{Image, ImageView}; 7 | use cacao::layout::{Layout, LayoutConstraint}; 8 | use cacao::view::{View, ViewController, ViewDelegate}; 9 | 10 | #[derive(Default)] 11 | struct TestApp; 12 | 13 | impl AppDelegate for TestApp { 14 | fn config_for_scene_session(&self, session: SceneSession, _options: SceneConnectionOptions) -> SceneConfig { 15 | SceneConfig::new("Default Configuration", session.role()) 16 | } 17 | } 18 | 19 | #[derive(Default)] 20 | pub struct RootView { 21 | pub red: View, 22 | pub green: View, 23 | pub blue: View, 24 | pub image: ImageView 25 | } 26 | 27 | impl ViewDelegate for RootView { 28 | const NAME: &'static str = "RootView"; 29 | 30 | fn did_load(&mut self, view: View) { 31 | self.red.set_background_color(Color::SystemRed); 32 | self.red.layer.set_corner_radius(16.); 33 | view.add_subview(&self.red); 34 | 35 | self.green.set_background_color(Color::SystemGreen); 36 | view.add_subview(&self.green); 37 | 38 | self.blue.set_background_color(Color::SystemBlue); 39 | view.add_subview(&self.blue); 40 | 41 | let image_bytes = include_bytes!("../resources/favicon.ico"); 42 | self.image = ImageView::new(); 43 | self.image.set_image(&Image::with_data(image_bytes)); 44 | view.add_subview(&self.image); 45 | 46 | LayoutConstraint::activate(&[ 47 | self.red.top.constraint_equal_to(&view.top).offset(16.), 48 | self.red.leading.constraint_equal_to(&view.leading).offset(16.), 49 | self.red.trailing.constraint_equal_to(&view.trailing).offset(-16.), 50 | self.red.height.constraint_equal_to_constant(100.), 51 | self.green.top.constraint_equal_to(&self.red.bottom).offset(16.), 52 | self.green.leading.constraint_equal_to(&view.leading).offset(16.), 53 | self.green.trailing.constraint_equal_to(&view.trailing).offset(-16.), 54 | self.green.height.constraint_equal_to_constant(120.), 55 | self.blue.top.constraint_equal_to(&self.green.bottom).offset(16.), 56 | self.blue.leading.constraint_equal_to(&view.leading).offset(16.), 57 | self.blue.trailing.constraint_equal_to(&view.trailing).offset(-16.), 58 | self.blue.bottom.constraint_equal_to(&view.bottom).offset(-16.) 59 | ]); 60 | } 61 | } 62 | 63 | #[derive(Default)] 64 | pub struct WindowScene { 65 | pub window: RwLock>, 66 | pub root_view_controller: RwLock>> 67 | } 68 | 69 | impl WindowSceneDelegate for WindowScene { 70 | fn will_connect(&self, scene: Scene, _session: SceneSession, _options: SceneConnectionOptions) { 71 | let bounds = scene.get_bounds(); 72 | let mut window = Window::new(bounds); 73 | window.set_window_scene(scene); 74 | 75 | let root_view_controller = ViewController::new(RootView::default()); 76 | window.set_root_view_controller(&root_view_controller); 77 | window.show(); 78 | 79 | { 80 | let mut w = self.window.write().unwrap(); 81 | *w = Some(window); 82 | 83 | let mut vc = self.root_view_controller.write().unwrap(); 84 | *vc = Some(root_view_controller); 85 | } 86 | } 87 | } 88 | 89 | fn main() { 90 | App::new(TestApp::default(), || Box::new(WindowScene::default())).run(); 91 | } 92 | --------------------------------------------------------------------------------