├── .github └── FUNDING.yml ├── .gitignore ├── .vscode ├── launch.json ├── settings.json └── tasks.json ├── Demo ├── .gitignore ├── Demo.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── Demo.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── Demo │ ├── Assets.xcassets │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ ├── ContentView.swift │ ├── DemoApp.swift │ ├── Preview Content │ │ └── Preview Assets.xcassets │ │ │ └── Contents.json │ └── Source.swift ├── FrostPodfile.lock ├── Podfile └── Podfile.lock ├── FrostPods └── .gitignore ├── Gemfile ├── Gemfile.lock ├── LICENSE ├── README.md ├── cocoapods-frost.gemspec ├── lib ├── cocoapods-frost │ ├── DSL.rb │ ├── build.rb │ ├── command │ │ └── frost.rb │ ├── gem_version.rb │ └── shared_flags.rb ├── cocoapods_.frost.rb └── cocoapods_plugin.rb └── local_pod.rb /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: muukii 4 | 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .bundle 3 | bundler 4 | Demo/Pods 5 | Demo/FrostPods 6 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Frost", 9 | "type": "Ruby", 10 | "request": "launch", 11 | "program": "${workspaceRoot}/local_pod.rb", 12 | "args": [ 13 | "frost" 14 | ], 15 | "useBundler": true, 16 | "cwd": "${workspaceRoot}/Demo" 17 | // "preLaunchTask": "clean" 18 | }, 19 | { 20 | "name": "Install", 21 | "type": "Ruby", 22 | "request": "launch", 23 | "program": "${workspaceRoot}/local_pod.rb", 24 | "args": [ 25 | "install" 26 | ], 27 | "useBundler": true, 28 | "cwd": "${workspaceRoot}/Demo" 29 | // "preLaunchTask": "clean" 30 | } 31 | ] 32 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "search.useIgnoreFiles": false 3 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | // See https://go.microsoft.com/fwlink/?LinkId=733558 3 | // for the documentation about the tasks.json format 4 | "version": "2.0.0", 5 | "tasks": [ 6 | { 7 | "label": "clean", 8 | "type": "shell", 9 | "command" : "rm -rf out", 10 | "options": { 11 | "cwd": "${workspaceRoot}" 12 | }, 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /Demo/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.toptal.com/developers/gitignore/api/swift 3 | # Edit at https://www.toptal.com/developers/gitignore?templates=swift 4 | 5 | ### Swift ### 6 | # Xcode 7 | # 8 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 9 | 10 | ## User settings 11 | xcuserdata/ 12 | 13 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) 14 | *.xcscmblueprint 15 | *.xccheckout 16 | 17 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) 18 | build/ 19 | DerivedData/ 20 | *.moved-aside 21 | *.pbxuser 22 | !default.pbxuser 23 | *.mode1v3 24 | !default.mode1v3 25 | *.mode2v3 26 | !default.mode2v3 27 | *.perspectivev3 28 | !default.perspectivev3 29 | 30 | ## Obj-C/Swift specific 31 | *.hmap 32 | 33 | ## App packaging 34 | *.ipa 35 | *.dSYM.zip 36 | *.dSYM 37 | 38 | ## Playgrounds 39 | timeline.xctimeline 40 | playground.xcworkspace 41 | 42 | # Swift Package Manager 43 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 44 | # Packages/ 45 | # Package.pins 46 | # Package.resolved 47 | # *.xcodeproj 48 | # Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata 49 | # hence it is not needed unless you have added a package configuration file to your project 50 | # .swiftpm 51 | 52 | .build/ 53 | 54 | # CocoaPods 55 | # We recommend against adding the Pods directory to your .gitignore. However 56 | # you should judge for yourself, the pros and cons are mentioned at: 57 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 58 | Pods/ 59 | # Add this line if you want to avoid checking in source code from the Xcode workspace 60 | # *.xcworkspace 61 | 62 | # Carthage 63 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 64 | # Carthage/Checkouts 65 | 66 | Carthage/Build/ 67 | 68 | # Accio dependency management 69 | Dependencies/ 70 | .accio/ 71 | 72 | # fastlane 73 | # It is recommended to not store the screenshots in the git repo. 74 | # Instead, use fastlane to re-generate the screenshots whenever they are needed. 75 | # For more information about the recommended setup visit: 76 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 77 | 78 | fastlane/report.xml 79 | fastlane/Preview.html 80 | fastlane/screenshots/**/*.png 81 | fastlane/test_output 82 | 83 | # Code Injection 84 | # After new code Injection tools there's a generated folder /iOSInjectionProject 85 | # https://github.com/johnno1962/injectionforxcode 86 | 87 | iOSInjectionProject/ 88 | 89 | # End of https://www.toptal.com/developers/gitignore/api/swift 90 | -------------------------------------------------------------------------------- /Demo/Demo.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 55; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 4B598BA427A57895005EA580 /* Source.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B598BA327A57894005EA580 /* Source.swift */; }; 11 | 4BA50B5927A54D6800EEAD2C /* DemoApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BA50B5827A54D6800EEAD2C /* DemoApp.swift */; }; 12 | 4BA50B5B27A54D6800EEAD2C /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BA50B5A27A54D6800EEAD2C /* ContentView.swift */; }; 13 | 4BA50B5D27A54D6800EEAD2C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4BA50B5C27A54D6800EEAD2C /* Assets.xcassets */; }; 14 | 4BA50B6027A54D6800EEAD2C /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4BA50B5F27A54D6800EEAD2C /* Preview Assets.xcassets */; }; 15 | CD3779F6E536CB4B792199B6 /* Pods_Demo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA70C07EE55192DDD0863B7 /* Pods_Demo.framework */; }; 16 | /* End PBXBuildFile section */ 17 | 18 | /* Begin PBXFileReference section */ 19 | 4B598BA327A57894005EA580 /* Source.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Source.swift; sourceTree = ""; }; 20 | 4BA50B5527A54D6800EEAD2C /* Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Demo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 21 | 4BA50B5827A54D6800EEAD2C /* DemoApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DemoApp.swift; sourceTree = ""; }; 22 | 4BA50B5A27A54D6800EEAD2C /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; 23 | 4BA50B5C27A54D6800EEAD2C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 24 | 4BA50B5F27A54D6800EEAD2C /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; 25 | 7947A478D87F9CF5D0795988 /* Pods-Demo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Demo.debug.xcconfig"; path = "Target Support Files/Pods-Demo/Pods-Demo.debug.xcconfig"; sourceTree = ""; }; 26 | AAA70C07EE55192DDD0863B7 /* Pods_Demo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Demo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 27 | FA15A9334260AA894A353B8E /* Pods-Demo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Demo.release.xcconfig"; path = "Target Support Files/Pods-Demo/Pods-Demo.release.xcconfig"; sourceTree = ""; }; 28 | /* End PBXFileReference section */ 29 | 30 | /* Begin PBXFrameworksBuildPhase section */ 31 | 4BA50B5227A54D6800EEAD2C /* Frameworks */ = { 32 | isa = PBXFrameworksBuildPhase; 33 | buildActionMask = 2147483647; 34 | files = ( 35 | CD3779F6E536CB4B792199B6 /* Pods_Demo.framework in Frameworks */, 36 | ); 37 | runOnlyForDeploymentPostprocessing = 0; 38 | }; 39 | /* End PBXFrameworksBuildPhase section */ 40 | 41 | /* Begin PBXGroup section */ 42 | 17F71C46347A4ED60E91A7CB /* Frameworks */ = { 43 | isa = PBXGroup; 44 | children = ( 45 | AAA70C07EE55192DDD0863B7 /* Pods_Demo.framework */, 46 | ); 47 | name = Frameworks; 48 | sourceTree = ""; 49 | }; 50 | 4BA50B4C27A54D6800EEAD2C = { 51 | isa = PBXGroup; 52 | children = ( 53 | 4BA50B5727A54D6800EEAD2C /* Demo */, 54 | 4BA50B5627A54D6800EEAD2C /* Products */, 55 | A5E99B453879F5270CFE222A /* Pods */, 56 | 17F71C46347A4ED60E91A7CB /* Frameworks */, 57 | ); 58 | sourceTree = ""; 59 | }; 60 | 4BA50B5627A54D6800EEAD2C /* Products */ = { 61 | isa = PBXGroup; 62 | children = ( 63 | 4BA50B5527A54D6800EEAD2C /* Demo.app */, 64 | ); 65 | name = Products; 66 | sourceTree = ""; 67 | }; 68 | 4BA50B5727A54D6800EEAD2C /* Demo */ = { 69 | isa = PBXGroup; 70 | children = ( 71 | 4BA50B5827A54D6800EEAD2C /* DemoApp.swift */, 72 | 4BA50B5A27A54D6800EEAD2C /* ContentView.swift */, 73 | 4B598BA327A57894005EA580 /* Source.swift */, 74 | 4BA50B5C27A54D6800EEAD2C /* Assets.xcassets */, 75 | 4BA50B5E27A54D6800EEAD2C /* Preview Content */, 76 | ); 77 | path = Demo; 78 | sourceTree = ""; 79 | }; 80 | 4BA50B5E27A54D6800EEAD2C /* Preview Content */ = { 81 | isa = PBXGroup; 82 | children = ( 83 | 4BA50B5F27A54D6800EEAD2C /* Preview Assets.xcassets */, 84 | ); 85 | path = "Preview Content"; 86 | sourceTree = ""; 87 | }; 88 | A5E99B453879F5270CFE222A /* Pods */ = { 89 | isa = PBXGroup; 90 | children = ( 91 | 7947A478D87F9CF5D0795988 /* Pods-Demo.debug.xcconfig */, 92 | FA15A9334260AA894A353B8E /* Pods-Demo.release.xcconfig */, 93 | ); 94 | path = Pods; 95 | sourceTree = ""; 96 | }; 97 | /* End PBXGroup section */ 98 | 99 | /* Begin PBXNativeTarget section */ 100 | 4BA50B5427A54D6800EEAD2C /* Demo */ = { 101 | isa = PBXNativeTarget; 102 | buildConfigurationList = 4BA50B6327A54D6800EEAD2C /* Build configuration list for PBXNativeTarget "Demo" */; 103 | buildPhases = ( 104 | F1C1A4BE17C542863AEE058F /* [CP] Check Pods Manifest.lock */, 105 | 4BA50B5127A54D6800EEAD2C /* Sources */, 106 | 4BA50B5227A54D6800EEAD2C /* Frameworks */, 107 | 4BA50B5327A54D6800EEAD2C /* Resources */, 108 | ); 109 | buildRules = ( 110 | ); 111 | dependencies = ( 112 | ); 113 | name = Demo; 114 | productName = Demo; 115 | productReference = 4BA50B5527A54D6800EEAD2C /* Demo.app */; 116 | productType = "com.apple.product-type.application"; 117 | }; 118 | /* End PBXNativeTarget section */ 119 | 120 | /* Begin PBXProject section */ 121 | 4BA50B4D27A54D6800EEAD2C /* Project object */ = { 122 | isa = PBXProject; 123 | attributes = { 124 | BuildIndependentTargetsInParallel = 1; 125 | LastSwiftUpdateCheck = 1320; 126 | LastUpgradeCheck = 1320; 127 | TargetAttributes = { 128 | 4BA50B5427A54D6800EEAD2C = { 129 | CreatedOnToolsVersion = 13.2.1; 130 | }; 131 | }; 132 | }; 133 | buildConfigurationList = 4BA50B5027A54D6800EEAD2C /* Build configuration list for PBXProject "Demo" */; 134 | compatibilityVersion = "Xcode 13.0"; 135 | developmentRegion = en; 136 | hasScannedForEncodings = 0; 137 | knownRegions = ( 138 | en, 139 | Base, 140 | ); 141 | mainGroup = 4BA50B4C27A54D6800EEAD2C; 142 | productRefGroup = 4BA50B5627A54D6800EEAD2C /* Products */; 143 | projectDirPath = ""; 144 | projectRoot = ""; 145 | targets = ( 146 | 4BA50B5427A54D6800EEAD2C /* Demo */, 147 | ); 148 | }; 149 | /* End PBXProject section */ 150 | 151 | /* Begin PBXResourcesBuildPhase section */ 152 | 4BA50B5327A54D6800EEAD2C /* Resources */ = { 153 | isa = PBXResourcesBuildPhase; 154 | buildActionMask = 2147483647; 155 | files = ( 156 | 4BA50B6027A54D6800EEAD2C /* Preview Assets.xcassets in Resources */, 157 | 4BA50B5D27A54D6800EEAD2C /* Assets.xcassets in Resources */, 158 | ); 159 | runOnlyForDeploymentPostprocessing = 0; 160 | }; 161 | /* End PBXResourcesBuildPhase section */ 162 | 163 | /* Begin PBXShellScriptBuildPhase section */ 164 | F1C1A4BE17C542863AEE058F /* [CP] Check Pods Manifest.lock */ = { 165 | isa = PBXShellScriptBuildPhase; 166 | buildActionMask = 2147483647; 167 | files = ( 168 | ); 169 | inputFileListPaths = ( 170 | ); 171 | inputPaths = ( 172 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 173 | "${PODS_ROOT}/Manifest.lock", 174 | ); 175 | name = "[CP] Check Pods Manifest.lock"; 176 | outputFileListPaths = ( 177 | ); 178 | outputPaths = ( 179 | "$(DERIVED_FILE_DIR)/Pods-Demo-checkManifestLockResult.txt", 180 | ); 181 | runOnlyForDeploymentPostprocessing = 0; 182 | shellPath = /bin/sh; 183 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 184 | showEnvVarsInLog = 0; 185 | }; 186 | /* End PBXShellScriptBuildPhase section */ 187 | 188 | /* Begin PBXSourcesBuildPhase section */ 189 | 4BA50B5127A54D6800EEAD2C /* Sources */ = { 190 | isa = PBXSourcesBuildPhase; 191 | buildActionMask = 2147483647; 192 | files = ( 193 | 4BA50B5B27A54D6800EEAD2C /* ContentView.swift in Sources */, 194 | 4BA50B5927A54D6800EEAD2C /* DemoApp.swift in Sources */, 195 | 4B598BA427A57895005EA580 /* Source.swift in Sources */, 196 | ); 197 | runOnlyForDeploymentPostprocessing = 0; 198 | }; 199 | /* End PBXSourcesBuildPhase section */ 200 | 201 | /* Begin XCBuildConfiguration section */ 202 | 4BA50B6127A54D6800EEAD2C /* Debug */ = { 203 | isa = XCBuildConfiguration; 204 | buildSettings = { 205 | ALWAYS_SEARCH_USER_PATHS = NO; 206 | CLANG_ANALYZER_NONNULL = YES; 207 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 208 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; 209 | CLANG_CXX_LIBRARY = "libc++"; 210 | CLANG_ENABLE_MODULES = YES; 211 | CLANG_ENABLE_OBJC_ARC = YES; 212 | CLANG_ENABLE_OBJC_WEAK = YES; 213 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 214 | CLANG_WARN_BOOL_CONVERSION = YES; 215 | CLANG_WARN_COMMA = YES; 216 | CLANG_WARN_CONSTANT_CONVERSION = YES; 217 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 218 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 219 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 220 | CLANG_WARN_EMPTY_BODY = YES; 221 | CLANG_WARN_ENUM_CONVERSION = YES; 222 | CLANG_WARN_INFINITE_RECURSION = YES; 223 | CLANG_WARN_INT_CONVERSION = YES; 224 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 225 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 226 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 227 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 228 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 229 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 230 | CLANG_WARN_STRICT_PROTOTYPES = YES; 231 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 232 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 233 | CLANG_WARN_UNREACHABLE_CODE = YES; 234 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 235 | COPY_PHASE_STRIP = NO; 236 | DEBUG_INFORMATION_FORMAT = dwarf; 237 | ENABLE_STRICT_OBJC_MSGSEND = YES; 238 | ENABLE_TESTABILITY = YES; 239 | GCC_C_LANGUAGE_STANDARD = gnu11; 240 | GCC_DYNAMIC_NO_PIC = NO; 241 | GCC_NO_COMMON_BLOCKS = YES; 242 | GCC_OPTIMIZATION_LEVEL = 0; 243 | GCC_PREPROCESSOR_DEFINITIONS = ( 244 | "DEBUG=1", 245 | "$(inherited)", 246 | ); 247 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 248 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 249 | GCC_WARN_UNDECLARED_SELECTOR = YES; 250 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 251 | GCC_WARN_UNUSED_FUNCTION = YES; 252 | GCC_WARN_UNUSED_VARIABLE = YES; 253 | IPHONEOS_DEPLOYMENT_TARGET = 15.2; 254 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 255 | MTL_FAST_MATH = YES; 256 | ONLY_ACTIVE_ARCH = YES; 257 | SDKROOT = iphoneos; 258 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 259 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 260 | }; 261 | name = Debug; 262 | }; 263 | 4BA50B6227A54D6800EEAD2C /* Release */ = { 264 | isa = XCBuildConfiguration; 265 | buildSettings = { 266 | ALWAYS_SEARCH_USER_PATHS = NO; 267 | CLANG_ANALYZER_NONNULL = YES; 268 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 269 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; 270 | CLANG_CXX_LIBRARY = "libc++"; 271 | CLANG_ENABLE_MODULES = YES; 272 | CLANG_ENABLE_OBJC_ARC = YES; 273 | CLANG_ENABLE_OBJC_WEAK = YES; 274 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 275 | CLANG_WARN_BOOL_CONVERSION = YES; 276 | CLANG_WARN_COMMA = YES; 277 | CLANG_WARN_CONSTANT_CONVERSION = YES; 278 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 279 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 280 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 281 | CLANG_WARN_EMPTY_BODY = YES; 282 | CLANG_WARN_ENUM_CONVERSION = YES; 283 | CLANG_WARN_INFINITE_RECURSION = YES; 284 | CLANG_WARN_INT_CONVERSION = YES; 285 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 286 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 287 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 288 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 289 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 290 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 291 | CLANG_WARN_STRICT_PROTOTYPES = YES; 292 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 293 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 294 | CLANG_WARN_UNREACHABLE_CODE = YES; 295 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 296 | COPY_PHASE_STRIP = NO; 297 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 298 | ENABLE_NS_ASSERTIONS = NO; 299 | ENABLE_STRICT_OBJC_MSGSEND = YES; 300 | GCC_C_LANGUAGE_STANDARD = gnu11; 301 | GCC_NO_COMMON_BLOCKS = YES; 302 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 303 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 304 | GCC_WARN_UNDECLARED_SELECTOR = YES; 305 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 306 | GCC_WARN_UNUSED_FUNCTION = YES; 307 | GCC_WARN_UNUSED_VARIABLE = YES; 308 | IPHONEOS_DEPLOYMENT_TARGET = 15.2; 309 | MTL_ENABLE_DEBUG_INFO = NO; 310 | MTL_FAST_MATH = YES; 311 | SDKROOT = iphoneos; 312 | SWIFT_COMPILATION_MODE = wholemodule; 313 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 314 | VALIDATE_PRODUCT = YES; 315 | }; 316 | name = Release; 317 | }; 318 | 4BA50B6427A54D6800EEAD2C /* Debug */ = { 319 | isa = XCBuildConfiguration; 320 | baseConfigurationReference = 7947A478D87F9CF5D0795988 /* Pods-Demo.debug.xcconfig */; 321 | buildSettings = { 322 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 323 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 324 | CODE_SIGN_STYLE = Automatic; 325 | CURRENT_PROJECT_VERSION = 1; 326 | DEVELOPMENT_ASSET_PATHS = "\"Demo/Preview Content\""; 327 | ENABLE_PREVIEWS = YES; 328 | GCC_PREPROCESSOR_DEFINITIONS = ( 329 | "$(inherited)", 330 | "COCOAPODS=1", 331 | "AS_USE_VIDEO=1", 332 | ); 333 | GENERATE_INFOPLIST_FILE = YES; 334 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; 335 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 336 | INFOPLIST_KEY_UILaunchScreen_Generation = YES; 337 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 338 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 339 | LD_RUNPATH_SEARCH_PATHS = ( 340 | "$(inherited)", 341 | "@executable_path/Frameworks", 342 | ); 343 | MARKETING_VERSION = 1.0; 344 | PRODUCT_BUNDLE_IDENTIFIER = app.muukii.Demo; 345 | PRODUCT_NAME = "$(TARGET_NAME)"; 346 | SWIFT_EMIT_LOC_STRINGS = YES; 347 | SWIFT_VERSION = 5.0; 348 | TARGETED_DEVICE_FAMILY = "1,2"; 349 | }; 350 | name = Debug; 351 | }; 352 | 4BA50B6527A54D6800EEAD2C /* Release */ = { 353 | isa = XCBuildConfiguration; 354 | baseConfigurationReference = FA15A9334260AA894A353B8E /* Pods-Demo.release.xcconfig */; 355 | buildSettings = { 356 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 357 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 358 | CODE_SIGN_STYLE = Automatic; 359 | CURRENT_PROJECT_VERSION = 1; 360 | DEVELOPMENT_ASSET_PATHS = "\"Demo/Preview Content\""; 361 | ENABLE_PREVIEWS = YES; 362 | GCC_PREPROCESSOR_DEFINITIONS = ( 363 | "$(inherited)", 364 | "COCOAPODS=1", 365 | "AS_USE_VIDEO=1", 366 | ); 367 | GENERATE_INFOPLIST_FILE = YES; 368 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; 369 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 370 | INFOPLIST_KEY_UILaunchScreen_Generation = YES; 371 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 372 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 373 | LD_RUNPATH_SEARCH_PATHS = ( 374 | "$(inherited)", 375 | "@executable_path/Frameworks", 376 | ); 377 | MARKETING_VERSION = 1.0; 378 | PRODUCT_BUNDLE_IDENTIFIER = app.muukii.Demo; 379 | PRODUCT_NAME = "$(TARGET_NAME)"; 380 | SWIFT_EMIT_LOC_STRINGS = YES; 381 | SWIFT_VERSION = 5.0; 382 | TARGETED_DEVICE_FAMILY = "1,2"; 383 | }; 384 | name = Release; 385 | }; 386 | /* End XCBuildConfiguration section */ 387 | 388 | /* Begin XCConfigurationList section */ 389 | 4BA50B5027A54D6800EEAD2C /* Build configuration list for PBXProject "Demo" */ = { 390 | isa = XCConfigurationList; 391 | buildConfigurations = ( 392 | 4BA50B6127A54D6800EEAD2C /* Debug */, 393 | 4BA50B6227A54D6800EEAD2C /* Release */, 394 | ); 395 | defaultConfigurationIsVisible = 0; 396 | defaultConfigurationName = Release; 397 | }; 398 | 4BA50B6327A54D6800EEAD2C /* Build configuration list for PBXNativeTarget "Demo" */ = { 399 | isa = XCConfigurationList; 400 | buildConfigurations = ( 401 | 4BA50B6427A54D6800EEAD2C /* Debug */, 402 | 4BA50B6527A54D6800EEAD2C /* Release */, 403 | ); 404 | defaultConfigurationIsVisible = 0; 405 | defaultConfigurationName = Release; 406 | }; 407 | /* End XCConfigurationList section */ 408 | }; 409 | rootObject = 4BA50B4D27A54D6800EEAD2C /* Project object */; 410 | } 411 | -------------------------------------------------------------------------------- /Demo/Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Demo/Demo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Demo/Demo.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Demo/Demo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "scale" : "2x", 6 | "size" : "20x20" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "scale" : "3x", 11 | "size" : "20x20" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "scale" : "2x", 16 | "size" : "29x29" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "scale" : "3x", 21 | "size" : "29x29" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "scale" : "2x", 26 | "size" : "40x40" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "scale" : "3x", 31 | "size" : "40x40" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "scale" : "2x", 36 | "size" : "60x60" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "scale" : "3x", 41 | "size" : "60x60" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "scale" : "1x", 46 | "size" : "20x20" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "scale" : "2x", 51 | "size" : "20x20" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "scale" : "1x", 56 | "size" : "29x29" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "scale" : "2x", 61 | "size" : "29x29" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "scale" : "1x", 66 | "size" : "40x40" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "scale" : "2x", 71 | "size" : "40x40" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "scale" : "1x", 76 | "size" : "76x76" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "scale" : "2x", 81 | "size" : "76x76" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "scale" : "2x", 86 | "size" : "83.5x83.5" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "scale" : "1x", 91 | "size" : "1024x1024" 92 | } 93 | ], 94 | "info" : { 95 | "author" : "xcode", 96 | "version" : 1 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Demo/Demo/ContentView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContentView.swift 3 | // Demo 4 | // 5 | // Created by Muukii on 2022/01/29. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ContentView: View { 11 | var body: some View { 12 | Text("Hello, world!") 13 | .padding() 14 | } 15 | } 16 | 17 | struct ContentView_Previews: PreviewProvider { 18 | static var previews: some View { 19 | ContentView() 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Demo/Demo/DemoApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DemoApp.swift 3 | // Demo 4 | // 5 | // Created by Muukii on 2022/01/29. 6 | // 7 | 8 | import SwiftUI 9 | 10 | @main 11 | struct DemoApp: App { 12 | var body: some Scene { 13 | WindowGroup { 14 | ContentView() 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Demo/Demo/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Demo/Demo/Source.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Source.swift 3 | // Demo 4 | // 5 | // Created by Muukii on 2022/01/29. 6 | // 7 | 8 | import Foundation 9 | 10 | #if canImport(AsyncDisplayKit) 11 | import AsyncDisplayKit 12 | #warning("✅") 13 | func run_AsyncDisplayKit() { 14 | ASVideoNode() 15 | } 16 | #endif 17 | 18 | #if canImport(JAYSON) 19 | import JAYSON 20 | #warning("✅") 21 | func run_JAYSON() { 22 | let j = JAYSON.JSON.init() 23 | } 24 | #endif 25 | 26 | #if canImport(SSZipArchive) 27 | import SSZipArchive 28 | #warning("✅") 29 | #endif 30 | 31 | #if canImport(Alamofire) 32 | #warning("✅") 33 | func run_Alamofire() { 34 | let j = Alamofire.Session() 35 | } 36 | #endif 37 | 38 | #if canImport(Moya) 39 | import Moya 40 | #endif 41 | //import RxSwift 42 | 43 | 44 | //func run() { 45 | // 46 | // Observable.create { _ in 47 | // 48 | // return Disposables.create() 49 | // } 50 | // 51 | //} 52 | -------------------------------------------------------------------------------- /Demo/FrostPodfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - _NIODataStructures (2.32.3) 3 | - CGRPCZlib (1.6.1) 4 | - CNIOAtomics (2.32.3) 5 | - CNIOBoringSSL (2.15.1) 6 | - CNIOBoringSSLShims (2.15.1): 7 | - CNIOBoringSSL (= 2.15.1) 8 | - CNIODarwin (2.32.3) 9 | - CNIOHTTPParser (2.32.3) 10 | - CNIOLinux (2.32.3) 11 | - CNIOWindows (2.32.3) 12 | - gRPC-Swift (1.6.1): 13 | - CGRPCZlib (= 1.6.1) 14 | - Logging (< 2.0.0, >= 1.4.0) 15 | - SwiftNIO (< 3.0.0, >= 2.32.0) 16 | - SwiftNIOExtras (< 2.0.0, >= 1.4.0) 17 | - SwiftNIOHTTP2 (< 2.0.0, >= 1.18.2) 18 | - SwiftNIOSSL (< 3.0.0, >= 2.14.0) 19 | - SwiftNIOTransportServices (< 2.0.0, >= 1.11.1) 20 | - SwiftProtobuf (< 2.0.0, >= 1.9.0) 21 | - ImageScrollView (1.9.3) 22 | - Logging (1.4.0) 23 | - RxSwift (6.5.0) 24 | - SSZipArchive (2.4.2) 25 | - SwiftNIO (2.32.3): 26 | - SwiftNIOCore (= 2.32.3) 27 | - SwiftNIOEmbedded (= 2.32.3) 28 | - SwiftNIOPosix (= 2.32.3) 29 | - SwiftNIOConcurrencyHelpers (2.32.3): 30 | - CNIOAtomics (= 2.32.3) 31 | - SwiftNIOCore (2.32.3): 32 | - CNIOLinux (= 2.32.3) 33 | - SwiftNIOConcurrencyHelpers (= 2.32.3) 34 | - SwiftNIOEmbedded (2.32.3): 35 | - _NIODataStructures (= 2.32.3) 36 | - SwiftNIOCore (= 2.32.3) 37 | - SwiftNIOExtras (1.10.2): 38 | - SwiftNIO (< 3, >= 2.32.0) 39 | - SwiftNIOFoundationCompat (2.32.3): 40 | - SwiftNIO (= 2.32.3) 41 | - SwiftNIOCore (= 2.32.3) 42 | - SwiftNIOHPACK (1.18.3): 43 | - SwiftNIO (< 3, >= 2.32.0) 44 | - SwiftNIOConcurrencyHelpers (< 3, >= 2.32.0) 45 | - SwiftNIOCore (< 3, >= 2.32.0) 46 | - SwiftNIOHTTP1 (< 3, >= 2.32.0) 47 | - SwiftNIOHTTP1 (2.32.3): 48 | - CNIOHTTPParser (= 2.32.3) 49 | - SwiftNIO (= 2.32.3) 50 | - SwiftNIOConcurrencyHelpers (= 2.32.3) 51 | - SwiftNIOCore (= 2.32.3) 52 | - SwiftNIOHTTP2 (1.18.3): 53 | - SwiftNIO (< 3, >= 2.32.0) 54 | - SwiftNIOConcurrencyHelpers (< 3, >= 2.32.0) 55 | - SwiftNIOCore (< 3, >= 2.32.0) 56 | - SwiftNIOHPACK (= 1.18.3) 57 | - SwiftNIOHTTP1 (< 3, >= 2.32.0) 58 | - SwiftNIOTLS (< 3, >= 2.32.0) 59 | - SwiftNIOPosix (2.32.3): 60 | - _NIODataStructures (= 2.32.3) 61 | - CNIODarwin (= 2.32.3) 62 | - CNIOLinux (= 2.32.3) 63 | - CNIOWindows (= 2.32.3) 64 | - SwiftNIOConcurrencyHelpers (= 2.32.3) 65 | - SwiftNIOCore (= 2.32.3) 66 | - SwiftNIOSSL (2.15.1): 67 | - CNIOBoringSSL (= 2.15.1) 68 | - CNIOBoringSSLShims (= 2.15.1) 69 | - SwiftNIO (< 3, >= 2.32.0) 70 | - SwiftNIOConcurrencyHelpers (< 3, >= 2.32.0) 71 | - SwiftNIOCore (< 3, >= 2.32.0) 72 | - SwiftNIOTLS (< 3, >= 2.32.0) 73 | - SwiftNIOTLS (2.32.3): 74 | - SwiftNIO (= 2.32.3) 75 | - SwiftNIOCore (= 2.32.3) 76 | - SwiftNIOTransportServices (1.11.3): 77 | - SwiftNIO (< 3, >= 2.32.0) 78 | - SwiftNIOConcurrencyHelpers (< 3, >= 2.32.0) 79 | - SwiftNIOFoundationCompat (< 3, >= 2.32.0) 80 | - SwiftNIOTLS (< 3, >= 2.32.0) 81 | - SwiftProtobuf (1.18.0) 82 | 83 | DEPENDENCIES: 84 | - _NIODataStructures 85 | - CGRPCZlib 86 | - CNIOAtomics 87 | - CNIOBoringSSL 88 | - CNIOBoringSSLShims 89 | - CNIODarwin 90 | - CNIOHTTPParser 91 | - CNIOLinux 92 | - CNIOWindows 93 | - gRPC-Swift (>= 1.4.2) 94 | - ImageScrollView (>= 1.8) 95 | - Logging 96 | - RxSwift 97 | - SSZipArchive 98 | - SwiftNIO 99 | - SwiftNIOConcurrencyHelpers 100 | - SwiftNIOCore 101 | - SwiftNIOEmbedded 102 | - SwiftNIOExtras 103 | - SwiftNIOFoundationCompat 104 | - SwiftNIOHPACK 105 | - SwiftNIOHTTP1 106 | - SwiftNIOHTTP2 107 | - SwiftNIOPosix 108 | - SwiftNIOSSL 109 | - SwiftNIOTLS 110 | - SwiftNIOTransportServices 111 | - SwiftProtobuf 112 | 113 | SPEC REPOS: 114 | trunk: 115 | - _NIODataStructures 116 | - CGRPCZlib 117 | - CNIOAtomics 118 | - CNIOBoringSSL 119 | - CNIOBoringSSLShims 120 | - CNIODarwin 121 | - CNIOHTTPParser 122 | - CNIOLinux 123 | - CNIOWindows 124 | - gRPC-Swift 125 | - ImageScrollView 126 | - Logging 127 | - RxSwift 128 | - SSZipArchive 129 | - SwiftNIO 130 | - SwiftNIOConcurrencyHelpers 131 | - SwiftNIOCore 132 | - SwiftNIOEmbedded 133 | - SwiftNIOExtras 134 | - SwiftNIOFoundationCompat 135 | - SwiftNIOHPACK 136 | - SwiftNIOHTTP1 137 | - SwiftNIOHTTP2 138 | - SwiftNIOPosix 139 | - SwiftNIOSSL 140 | - SwiftNIOTLS 141 | - SwiftNIOTransportServices 142 | - SwiftProtobuf 143 | 144 | SPEC CHECKSUMS: 145 | _NIODataStructures: e2077c7dc7c1d6c93e698c85fe04d663a17f53a4 146 | CGRPCZlib: 85aa377bf9000ab80ff54f12aa5b0075e1e732fd 147 | CNIOAtomics: 4dde57e1838a29a9b23ef91617505f34751cdbe5 148 | CNIOBoringSSL: c99129423da079a9eb74bcfc7cfec41a6775cf94 149 | CNIOBoringSSLShims: 902ae35fea0b6be5eefb4fdce906751886cfa46f 150 | CNIODarwin: 0489511f8486443af71ff986ccd5abbc680ae713 151 | CNIOHTTPParser: f7a6816f7ddbe7dfa57a74cd36dc2db2c53b56e8 152 | CNIOLinux: 5921dfefbc4bbe017380b34c510855622147ea41 153 | CNIOWindows: f5aa9dfb401b440a7b4c9cd911e53e981a787193 154 | gRPC-Swift: 4336e01aad8ec517734d79b2c7f64c6db9ab35e3 155 | ImageScrollView: d3ce8371e0d44299b2b638410db45387e18aa83f 156 | Logging: beeb016c9c80cf77042d62e83495816847ef108b 157 | RxSwift: 5710a9e6b17f3c3d6e40d6e559b9fa1e813b2ef8 158 | SSZipArchive: e7b4f3d9e780c2acc1764cd88fbf2de28f26e5b2 159 | SwiftNIO: bb336ceef32850e9671d3fa0e0cc2b9add3b5948 160 | SwiftNIOConcurrencyHelpers: ca2594e10749655f42baf5468212be83d2f94fe3 161 | SwiftNIOCore: 9deed6620f80c7c82e8e2c2ffb9864495416d892 162 | SwiftNIOEmbedded: b7ccf12b402dff35a5d4356990a6253621e4337d 163 | SwiftNIOExtras: 70f09aa8eca3ab6baeaf1993da9c855b6e95e97f 164 | SwiftNIOFoundationCompat: d3b888766e7c67354a4e4e145d38edf9586efa0c 165 | SwiftNIOHPACK: e2fc784ce453bec4c058b21071e89fb7e542ac30 166 | SwiftNIOHTTP1: 349a16aae363250cd49f430a9fdb93cff518adfa 167 | SwiftNIOHTTP2: a0322f3dcecd949e03df65f4dac106411df0f12c 168 | SwiftNIOPosix: e4988a8dcfd5a6319bde219d7a3d0acc5fbe7a89 169 | SwiftNIOSSL: 7c2ddcbcbb2a8188468b7fe9c2bc6124df4b3772 170 | SwiftNIOTLS: 1b8290ec775238ccc714ed842d929494df95a2c2 171 | SwiftNIOTransportServices: 1fbbdb58510af3c53a838a1dbea98f18132dc952 172 | SwiftProtobuf: c3c12645230d9b09c72267e0de89468c5543bd86 173 | 174 | PODFILE CHECKSUM: 068f5f35a3abc97a54e6fc97fe3ce74cb92cf930 175 | 176 | COCOAPODS: 1.11.2 177 | -------------------------------------------------------------------------------- /Demo/Podfile: -------------------------------------------------------------------------------- 1 | 2 | plugin "cocoapods-frost" 3 | 4 | use_frameworks! :linkage => :static 5 | 6 | platform :ios, '12.0' 7 | 8 | install! "cocoapods", 9 | :generate_multiple_pod_projects => true, 10 | :incremental_installation => false 11 | 12 | target 'Demo' do 13 | 14 | # frost_pod "Moya/Core" 15 | # frost_pod "Texture/Core" 16 | # frost_pod "Texture/Video" 17 | # frost_pod "AppVersionMonitor" 18 | 19 | # pod "Advance", git: "git@github.com:timdonnelly/Advance.git", branch: "master" 20 | 21 | frost_pod "RxSwift" 22 | 23 | # pod 'RealmSwift' 24 | frost_pod "ImageScrollView", ">= 1.8" 25 | frost_pod "SSZipArchive" 26 | frost_pod "gRPC-Swift", ">=1.4.2" 27 | frost_pod "CGRPCZlib" 28 | frost_pod "Logging" 29 | frost_pod "SwiftNIO" 30 | frost_pod "SwiftNIOCore" 31 | frost_pod "SwiftNIOConcurrencyHelpers" 32 | frost_pod "CNIOAtomics" 33 | frost_pod "CNIOLinux" 34 | frost_pod "SwiftNIOEmbedded" 35 | frost_pod "_NIODataStructures" 36 | frost_pod "SwiftNIOPosix" 37 | frost_pod "CNIODarwin" 38 | frost_pod "CNIOWindows" 39 | frost_pod "SwiftNIOExtras" 40 | frost_pod "SwiftNIOHTTP2" 41 | frost_pod "SwiftNIOHPACK" 42 | frost_pod "SwiftNIOHTTP1" 43 | frost_pod "CNIOHTTPParser" 44 | frost_pod "SwiftNIOTLS" 45 | frost_pod "SwiftNIOSSL" 46 | frost_pod "CNIOBoringSSL" 47 | frost_pod "CNIOBoringSSLShims" 48 | frost_pod "SwiftNIOTransportServices" 49 | frost_pod "SwiftNIOFoundationCompat" 50 | frost_pod "SwiftProtobuf" 51 | 52 | break 53 | 54 | # frost_pod "SVGKit" 55 | 56 | # frost_pod "Texture/Core" 57 | # frost_pod "Texture/Video" 58 | 59 | frost_pod "JAYSON" 60 | 61 | # pod "Brightroom" 62 | 63 | pod "FBSDKCoreKit" 64 | pod "FBSDKLoginKit" 65 | 66 | frost_pod "RxSwift" 67 | frost_pod "RxCocoa" 68 | frost_pod "RxRelay" 69 | frost_pod "RxFuture" 70 | frost_pod "lottie-ios" 71 | 72 | # pod "Verge" 73 | 74 | frost_pod "MagazineLayout" 75 | 76 | end 77 | 78 | post_install do |installer| 79 | puts "Post" 80 | installer.pods_project.targets.each do |target| 81 | target.build_configurations.each do |config| 82 | config.build_settings['SWIFT_VERSION'] = '5.0' 83 | end 84 | end 85 | end -------------------------------------------------------------------------------- /Demo/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - _NIODataStructures (2.32.3) 3 | - Advance (3.1.1) 4 | - CGRPCZlib (1.6.1) 5 | - CNIOAtomics (2.32.3) 6 | - CNIOBoringSSL (2.15.1) 7 | - CNIOBoringSSLShims (2.15.1): 8 | - CNIOBoringSSL (= 2.15.1) 9 | - CNIODarwin (2.32.3) 10 | - CNIOHTTPParser (2.32.3) 11 | - CNIOLinux (2.32.3) 12 | - CNIOWindows (2.32.3) 13 | - gRPC-Swift (1.6.1): 14 | - CGRPCZlib (= 1.6.1) 15 | - Logging (< 2.0.0, >= 1.4.0) 16 | - SwiftNIO (< 3.0.0, >= 2.32.0) 17 | - SwiftNIOExtras (< 2.0.0, >= 1.4.0) 18 | - SwiftNIOHTTP2 (< 2.0.0, >= 1.18.2) 19 | - SwiftNIOSSL (< 3.0.0, >= 2.14.0) 20 | - SwiftNIOTransportServices (< 2.0.0, >= 1.11.1) 21 | - SwiftProtobuf (< 2.0.0, >= 1.9.0) 22 | - Logging (1.4.0) 23 | - Realm (10.22.0): 24 | - Realm/Headers (= 10.22.0) 25 | - Realm/Headers (10.22.0) 26 | - RealmSwift (10.22.0): 27 | - Realm (= 10.22.0) 28 | - SwiftNIO (2.32.3): 29 | - SwiftNIOCore (= 2.32.3) 30 | - SwiftNIOEmbedded (= 2.32.3) 31 | - SwiftNIOPosix (= 2.32.3) 32 | - SwiftNIOConcurrencyHelpers (2.32.3): 33 | - CNIOAtomics (= 2.32.3) 34 | - SwiftNIOCore (2.32.3): 35 | - CNIOLinux (= 2.32.3) 36 | - SwiftNIOConcurrencyHelpers (= 2.32.3) 37 | - SwiftNIOEmbedded (2.32.3): 38 | - _NIODataStructures (= 2.32.3) 39 | - SwiftNIOCore (= 2.32.3) 40 | - SwiftNIOExtras (1.10.2): 41 | - SwiftNIO (< 3, >= 2.32.0) 42 | - SwiftNIOFoundationCompat (2.32.3): 43 | - SwiftNIO (= 2.32.3) 44 | - SwiftNIOCore (= 2.32.3) 45 | - SwiftNIOHPACK (1.18.3): 46 | - SwiftNIO (< 3, >= 2.32.0) 47 | - SwiftNIOConcurrencyHelpers (< 3, >= 2.32.0) 48 | - SwiftNIOCore (< 3, >= 2.32.0) 49 | - SwiftNIOHTTP1 (< 3, >= 2.32.0) 50 | - SwiftNIOHTTP1 (2.32.3): 51 | - CNIOHTTPParser (= 2.32.3) 52 | - SwiftNIO (= 2.32.3) 53 | - SwiftNIOConcurrencyHelpers (= 2.32.3) 54 | - SwiftNIOCore (= 2.32.3) 55 | - SwiftNIOHTTP2 (1.18.3): 56 | - SwiftNIO (< 3, >= 2.32.0) 57 | - SwiftNIOConcurrencyHelpers (< 3, >= 2.32.0) 58 | - SwiftNIOCore (< 3, >= 2.32.0) 59 | - SwiftNIOHPACK (= 1.18.3) 60 | - SwiftNIOHTTP1 (< 3, >= 2.32.0) 61 | - SwiftNIOTLS (< 3, >= 2.32.0) 62 | - SwiftNIOPosix (2.32.3): 63 | - _NIODataStructures (= 2.32.3) 64 | - CNIODarwin (= 2.32.3) 65 | - CNIOLinux (= 2.32.3) 66 | - CNIOWindows (= 2.32.3) 67 | - SwiftNIOConcurrencyHelpers (= 2.32.3) 68 | - SwiftNIOCore (= 2.32.3) 69 | - SwiftNIOSSL (2.15.1): 70 | - CNIOBoringSSL (= 2.15.1) 71 | - CNIOBoringSSLShims (= 2.15.1) 72 | - SwiftNIO (< 3, >= 2.32.0) 73 | - SwiftNIOConcurrencyHelpers (< 3, >= 2.32.0) 74 | - SwiftNIOCore (< 3, >= 2.32.0) 75 | - SwiftNIOTLS (< 3, >= 2.32.0) 76 | - SwiftNIOTLS (2.32.3): 77 | - SwiftNIO (= 2.32.3) 78 | - SwiftNIOCore (= 2.32.3) 79 | - SwiftNIOTransportServices (1.11.3): 80 | - SwiftNIO (< 3, >= 2.32.0) 81 | - SwiftNIOConcurrencyHelpers (< 3, >= 2.32.0) 82 | - SwiftNIOFoundationCompat (< 3, >= 2.32.0) 83 | - SwiftNIOTLS (< 3, >= 2.32.0) 84 | - SwiftProtobuf (1.18.0) 85 | 86 | DEPENDENCIES: 87 | - _NIODataStructures (from `./FrostPods/GeneratedPods/_NIODataStructures`) 88 | - "Advance (from `git@github.com:timdonnelly/Advance.git`, branch `master`)" 89 | - CGRPCZlib (from `./FrostPods/GeneratedPods/CGRPCZlib`) 90 | - CNIOAtomics (from `./FrostPods/GeneratedPods/CNIOAtomics`) 91 | - CNIOBoringSSL (from `./FrostPods/GeneratedPods/CNIOBoringSSL`) 92 | - CNIOBoringSSLShims (from `./FrostPods/GeneratedPods/CNIOBoringSSLShims`) 93 | - CNIODarwin (from `./FrostPods/GeneratedPods/CNIODarwin`) 94 | - CNIOHTTPParser (from `./FrostPods/GeneratedPods/CNIOHTTPParser`) 95 | - CNIOLinux (from `./FrostPods/GeneratedPods/CNIOLinux`) 96 | - CNIOWindows (from `./FrostPods/GeneratedPods/CNIOWindows`) 97 | - gRPC-Swift (from `./FrostPods/GeneratedPods/gRPC-Swift`) 98 | - Logging (from `./FrostPods/GeneratedPods/Logging`) 99 | - RealmSwift 100 | - SwiftNIO (from `./FrostPods/GeneratedPods/SwiftNIO`) 101 | - SwiftNIOConcurrencyHelpers (from `./FrostPods/GeneratedPods/SwiftNIOConcurrencyHelpers`) 102 | - SwiftNIOCore (from `./FrostPods/GeneratedPods/SwiftNIOCore`) 103 | - SwiftNIOEmbedded (from `./FrostPods/GeneratedPods/SwiftNIOEmbedded`) 104 | - SwiftNIOExtras (from `./FrostPods/GeneratedPods/SwiftNIOExtras`) 105 | - SwiftNIOFoundationCompat (from `./FrostPods/GeneratedPods/SwiftNIOFoundationCompat`) 106 | - SwiftNIOHPACK (from `./FrostPods/GeneratedPods/SwiftNIOHPACK`) 107 | - SwiftNIOHTTP1 (from `./FrostPods/GeneratedPods/SwiftNIOHTTP1`) 108 | - SwiftNIOHTTP2 (from `./FrostPods/GeneratedPods/SwiftNIOHTTP2`) 109 | - SwiftNIOPosix (from `./FrostPods/GeneratedPods/SwiftNIOPosix`) 110 | - SwiftNIOSSL (from `./FrostPods/GeneratedPods/SwiftNIOSSL`) 111 | - SwiftNIOTLS (from `./FrostPods/GeneratedPods/SwiftNIOTLS`) 112 | - SwiftNIOTransportServices (from `./FrostPods/GeneratedPods/SwiftNIOTransportServices`) 113 | - SwiftProtobuf (from `./FrostPods/GeneratedPods/SwiftProtobuf`) 114 | 115 | SPEC REPOS: 116 | trunk: 117 | - Realm 118 | - RealmSwift 119 | 120 | EXTERNAL SOURCES: 121 | _NIODataStructures: 122 | :path: "./FrostPods/GeneratedPods/_NIODataStructures" 123 | Advance: 124 | :branch: master 125 | :git: "git@github.com:timdonnelly/Advance.git" 126 | CGRPCZlib: 127 | :path: "./FrostPods/GeneratedPods/CGRPCZlib" 128 | CNIOAtomics: 129 | :path: "./FrostPods/GeneratedPods/CNIOAtomics" 130 | CNIOBoringSSL: 131 | :path: "./FrostPods/GeneratedPods/CNIOBoringSSL" 132 | CNIOBoringSSLShims: 133 | :path: "./FrostPods/GeneratedPods/CNIOBoringSSLShims" 134 | CNIODarwin: 135 | :path: "./FrostPods/GeneratedPods/CNIODarwin" 136 | CNIOHTTPParser: 137 | :path: "./FrostPods/GeneratedPods/CNIOHTTPParser" 138 | CNIOLinux: 139 | :path: "./FrostPods/GeneratedPods/CNIOLinux" 140 | CNIOWindows: 141 | :path: "./FrostPods/GeneratedPods/CNIOWindows" 142 | gRPC-Swift: 143 | :path: "./FrostPods/GeneratedPods/gRPC-Swift" 144 | Logging: 145 | :path: "./FrostPods/GeneratedPods/Logging" 146 | SwiftNIO: 147 | :path: "./FrostPods/GeneratedPods/SwiftNIO" 148 | SwiftNIOConcurrencyHelpers: 149 | :path: "./FrostPods/GeneratedPods/SwiftNIOConcurrencyHelpers" 150 | SwiftNIOCore: 151 | :path: "./FrostPods/GeneratedPods/SwiftNIOCore" 152 | SwiftNIOEmbedded: 153 | :path: "./FrostPods/GeneratedPods/SwiftNIOEmbedded" 154 | SwiftNIOExtras: 155 | :path: "./FrostPods/GeneratedPods/SwiftNIOExtras" 156 | SwiftNIOFoundationCompat: 157 | :path: "./FrostPods/GeneratedPods/SwiftNIOFoundationCompat" 158 | SwiftNIOHPACK: 159 | :path: "./FrostPods/GeneratedPods/SwiftNIOHPACK" 160 | SwiftNIOHTTP1: 161 | :path: "./FrostPods/GeneratedPods/SwiftNIOHTTP1" 162 | SwiftNIOHTTP2: 163 | :path: "./FrostPods/GeneratedPods/SwiftNIOHTTP2" 164 | SwiftNIOPosix: 165 | :path: "./FrostPods/GeneratedPods/SwiftNIOPosix" 166 | SwiftNIOSSL: 167 | :path: "./FrostPods/GeneratedPods/SwiftNIOSSL" 168 | SwiftNIOTLS: 169 | :path: "./FrostPods/GeneratedPods/SwiftNIOTLS" 170 | SwiftNIOTransportServices: 171 | :path: "./FrostPods/GeneratedPods/SwiftNIOTransportServices" 172 | SwiftProtobuf: 173 | :path: "./FrostPods/GeneratedPods/SwiftProtobuf" 174 | 175 | CHECKOUT OPTIONS: 176 | Advance: 177 | :commit: 3156e6c5ba2960de7b5a910a2c8433d7fd612c25 178 | :git: "git@github.com:timdonnelly/Advance.git" 179 | 180 | SPEC CHECKSUMS: 181 | _NIODataStructures: 71854f8d8f90c7fb75f06c8fe46b4a635044e92c 182 | Advance: 1fdaffe719fadf10e6bbfd6933d6b5c928b4363d 183 | CGRPCZlib: a31b449251234355d0b0f7ace33c0936a23e5653 184 | CNIOAtomics: a9f9db6a643165ff2ce0a01bc41534440f1f8839 185 | CNIOBoringSSL: 755735da04e12fcc7b1b7a9d34a60da150bf9565 186 | CNIOBoringSSLShims: 3b141da57f78c70add3154be76446886c4d30882 187 | CNIODarwin: 8a58814ff030491b6d25f0ec2409e1dc55d8ea04 188 | CNIOHTTPParser: 2d7f17fd3b89b6396b380d0c0b4ed0dfce776df8 189 | CNIOLinux: 379984ac9d634d93a7463a20d6f8ea5480943e69 190 | CNIOWindows: c7050f3d17e137fedb1763412c73a64bd4ed1fb0 191 | gRPC-Swift: 3a8a040b8bfe001e420fcceb5564f52e4cb1f605 192 | Logging: 112cd1df09246759f6124ce087afde6a411d6b57 193 | Realm: d9e4e5877095a6722145811f56fe89a531c9659d 194 | RealmSwift: e4191b4b957fcfcbed23751ec65eec98f8173ab5 195 | SwiftNIO: 5241979c539f2b877f69c0f8cecce2ab86508caf 196 | SwiftNIOConcurrencyHelpers: 17bba287c54531699f2a0a176bdda2d6bbe76247 197 | SwiftNIOCore: 7b9b320bdd91275e7f9e155daca9f6a97a2b1cf4 198 | SwiftNIOEmbedded: e1a7bcd4f08e783d8c90bf86e320ec2ebfcd75bb 199 | SwiftNIOExtras: 2ed9886c4e3f5ccb7d3d23e4e659f0a80b00bb91 200 | SwiftNIOFoundationCompat: fddfc89cfa5ddf598e5866c654dc2104230ded80 201 | SwiftNIOHPACK: 47442005b188b84b6a50266bc695ed41f75ae1da 202 | SwiftNIOHTTP1: 066273ed81569156f9125bf300c7555f849ec347 203 | SwiftNIOHTTP2: 152f2cba19f718428667fd7b614b77b8c251ed6d 204 | SwiftNIOPosix: 6da37bbb37dc5d6d9875b4ac9e8174717e9c2715 205 | SwiftNIOSSL: 6e2886ae0758ed755ec1029951e8d67d78ef5d60 206 | SwiftNIOTLS: 8a4e68a16ed9cdc00b82a2343bc227ba978283c1 207 | SwiftNIOTransportServices: a76dd82028ca31861ae5e2e10da6f3a969497afc 208 | SwiftProtobuf: b2584267331e89e3086097bef1a08d2b48442f17 209 | 210 | PODFILE CHECKSUM: 7168fbc719e6dcf8a8bedbf77ca283a639b2121c 211 | 212 | COCOAPODS: 1.11.2 213 | -------------------------------------------------------------------------------- /FrostPods/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | build 3 | out 4 | Pods 5 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | source 'https://rubygems.org' 4 | 5 | # Specify your gem's dependencies in cocoapods-frost.gemspec 6 | gemspec 7 | 8 | gem 'ruby-debug-ide' 9 | gem 'debase' 10 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | PATH 2 | remote: . 3 | specs: 4 | cocoapods-frost (1.0.0) 5 | cocoapods (>= 1.10, < 2.0) 6 | concurrent-ruby 7 | 8 | GEM 9 | remote: https://rubygems.org/ 10 | specs: 11 | CFPropertyList (3.0.5) 12 | rexml 13 | activesupport (6.1.4.4) 14 | concurrent-ruby (~> 1.0, >= 1.0.2) 15 | i18n (>= 1.6, < 2) 16 | minitest (>= 5.1) 17 | tzinfo (~> 2.0) 18 | zeitwerk (~> 2.3) 19 | addressable (2.8.0) 20 | public_suffix (>= 2.0.2, < 5.0) 21 | algoliasearch (1.27.5) 22 | httpclient (~> 2.8, >= 2.8.3) 23 | json (>= 1.5.1) 24 | atomos (0.1.3) 25 | claide (1.1.0) 26 | cocoapods (1.11.2) 27 | addressable (~> 2.8) 28 | claide (>= 1.0.2, < 2.0) 29 | cocoapods-core (= 1.11.2) 30 | cocoapods-deintegrate (>= 1.0.3, < 2.0) 31 | cocoapods-downloader (>= 1.4.0, < 2.0) 32 | cocoapods-plugins (>= 1.0.0, < 2.0) 33 | cocoapods-search (>= 1.0.0, < 2.0) 34 | cocoapods-trunk (>= 1.4.0, < 2.0) 35 | cocoapods-try (>= 1.1.0, < 2.0) 36 | colored2 (~> 3.1) 37 | escape (~> 0.0.4) 38 | fourflusher (>= 2.3.0, < 3.0) 39 | gh_inspector (~> 1.0) 40 | molinillo (~> 0.8.0) 41 | nap (~> 1.0) 42 | ruby-macho (>= 1.0, < 3.0) 43 | xcodeproj (>= 1.21.0, < 2.0) 44 | cocoapods-core (1.11.2) 45 | activesupport (>= 5.0, < 7) 46 | addressable (~> 2.8) 47 | algoliasearch (~> 1.0) 48 | concurrent-ruby (~> 1.1) 49 | fuzzy_match (~> 2.0.4) 50 | nap (~> 1.0) 51 | netrc (~> 0.11) 52 | public_suffix (~> 4.0) 53 | typhoeus (~> 1.0) 54 | cocoapods-deintegrate (1.0.5) 55 | cocoapods-downloader (1.5.1) 56 | cocoapods-plugins (1.0.0) 57 | nap 58 | cocoapods-search (1.0.1) 59 | cocoapods-trunk (1.6.0) 60 | nap (>= 0.8, < 2.0) 61 | netrc (~> 0.11) 62 | cocoapods-try (1.2.0) 63 | colored2 (3.1.2) 64 | concurrent-ruby (1.1.9) 65 | debase (0.2.4.1) 66 | debase-ruby_core_source (>= 0.10.2) 67 | debase-ruby_core_source (0.10.14) 68 | escape (0.0.4) 69 | ethon (0.15.0) 70 | ffi (>= 1.15.0) 71 | ffi (1.15.5) 72 | fourflusher (2.3.1) 73 | fuzzy_match (2.0.4) 74 | gh_inspector (1.1.3) 75 | httpclient (2.8.3) 76 | i18n (1.9.1) 77 | concurrent-ruby (~> 1.0) 78 | json (2.6.1) 79 | minitest (5.15.0) 80 | molinillo (0.8.0) 81 | nanaimo (0.3.0) 82 | nap (1.1.0) 83 | netrc (0.11.0) 84 | public_suffix (4.0.6) 85 | rake (13.0.6) 86 | rexml (3.2.5) 87 | ruby-debug-ide (0.7.3) 88 | rake (>= 0.8.1) 89 | ruby-macho (2.5.1) 90 | typhoeus (1.4.0) 91 | ethon (>= 0.9.0) 92 | tzinfo (2.0.4) 93 | concurrent-ruby (~> 1.0) 94 | xcodeproj (1.21.0) 95 | CFPropertyList (>= 2.3.3, < 4.0) 96 | atomos (~> 0.1.3) 97 | claide (>= 1.0.2, < 2.0) 98 | colored2 (~> 3.1) 99 | nanaimo (~> 0.3.0) 100 | rexml (~> 3.2.4) 101 | zeitwerk (2.5.4) 102 | 103 | PLATFORMS 104 | arm64-darwin-21 105 | 106 | DEPENDENCIES 107 | bundler (~> 2.0) 108 | cocoapods-frost! 109 | debase 110 | ruby-debug-ide 111 | 112 | BUNDLED WITH 113 | 2.3.5 114 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Hiroshi Kimura (Muukii) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # cocoapods-frost 2 | 3 | A plugin for [CocoaPods](https://cocoapods.org/) that creates XCFramework(for internal distribution) for speeding up build time. 4 | 5 | > 🚜 Still working on development, but partially works 6 | 7 | **Alternatives** 8 | - [coocapods-binary](https://github.com/leavez/cocoapods-binary) 9 | - [PodBuilder](https://github.com/Subito-it/PodBuilder) 10 | - [Rugby](https://github.com/swiftyfinch/Rugby) 11 | 12 | ## Support this project 13 | 14 | If you are interested in this project or you need 15 | - Hit the ⭐️ button to make this project popular. 16 | - Becoming sponsorship in subscription or one-time. 17 | 18 | 19 | yellow-button 20 | 21 | 22 | ## Features 23 | 24 | - Supports static or dynamic by `use_frameworks! :linkage => :static` 25 | - Supports coexisting in source code and frameworks 26 | 27 | ## known Issues 28 | 29 | Managed in [issues](https://github.com/muukii/cocoapods-frost/issues) 30 | 31 | - Supports only iOS currently 32 | - some pods fails build 33 | - especially, already provided as framework 34 | - if you found such pod, please report it from [issues](https://github.com/muukii/cocoapods-frost/issues) 35 | - Does not create xcframework for implicit dependencies from a pod 36 | - Make it explicit using `frost_pod`. 37 | - For instance, `frost_pod 'Alamofire'` for `frost_pod 'Moya'` 38 | - Multiple specifying pods with `pod` and `frost_pod` 39 | - Do not use `pod` and `frost_pod` in different target. Please use either one. 40 | - Not inherited current install version in pod 41 | - Specify install version (e.g. `pod 'some', "1.2.0"`) 42 | - [Not supported yet building pod that has resource](https://github.com/muukii/cocoapods-frost/issues/7) 43 | 44 | ## Attention 45 | 46 | - Should build all of targets when pod updated - partially building might causes linking error (compile-time or dynamic-linking-time) 47 | - Future updates, completely isolated pods can be build partially. 48 | 49 | ## How it works 50 | 51 | - Defines pod by `frost_pod` that creates XCFramework. 52 | - Builds and creates XCFramework with `-allow-internal-distribution` from build settings CocoaPods generated. 53 | - Generates a `podspec.json` that installs XCFramework as `vendored_frameworks` 54 | - `frost_pod` uses that generated podspec as a local pod. which installs XCFramework instead of sources. 55 | 56 | ## Making XCFrameworks 57 | 58 | Make bundler installs `cocoapods-frost` 59 | 60 | `Gemfile` 61 | ``` 62 | gem 'cocoapods-frost', git: "https://github.com/muukii/cocoapods-frost.git", branch: "main" 63 | ``` 64 | 65 | Annotate Podfile that uses `cocoapods-frost` as plugin 66 | 67 | `Podfile` 68 | ```ruby 69 | plugin "cocoapods-frost" 70 | ``` 71 | 72 | Specifies pods with `pod_frost` that needs to create XCFramework. 73 | Still, using `pod` can be left to build from source code. 74 | 75 | `Podfile` 76 | ```ruby 77 | frost_pod "Moya" 78 | frost_pod "MondrianLayout" 79 | 80 | pod "JAYSON" 81 | ``` 82 | 83 | Build XCFrameworks 84 | 85 | ```sh 86 | $ bundle exec pod frost 87 | ``` 88 | 89 | Then 90 | 91 | ```sh 92 | $ bundle exec pod install 93 | ``` 94 | 95 | ## Updating pods 96 | 97 | Use `--update-pods` to update pods 98 | 99 | ```shell 100 | $ bundle exec pod frost --update-pods=RxSwift 101 | ``` 102 | 103 | ## Directory structure 104 | 105 | - Repository 106 | - Podfile 107 | - Podfile.lock 108 | - FrostPodfile.lock `cocoapods-frost` creates, should be managed in git 109 | - Pods 110 | - FrostPods <- `cocoapods-frost` creates 111 | - GeneratedPods (should be managed in git, git-lfs, something else) 112 | 113 | ## About subspecs 114 | 115 | CocoaPods integrates multiple subspecs into one module. 116 | Generated XCFramework contains all of subspecs specified in Podfile. 117 | 118 | For instance, 119 | 120 | https://github.com/Moya/Moya/blob/master/Moya.podspec 121 | 122 | ```ruby 123 | frost_pod "Moya/Core" 124 | frost_pod "Moya/Combine" 125 | ``` 126 | that creates `Moya.xcframework` includes core implementation and combine supports. 127 | 128 | So `frost_pod` specifies as whole pod with dropping subspec specifiers. 129 | 130 | ## Development 131 | 132 | It supports debugging in VSCode. 133 | 134 | ## License 135 | 136 | MIT 137 | 138 | ## Author 139 | 140 | - [Hiroshi Kimura (Muukii)](https://github.com/muukii) 141 | -------------------------------------------------------------------------------- /cocoapods-frost.gemspec: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | lib = File.expand_path('lib', __dir__) 4 | $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) 5 | require 'cocoapods-frost/gem_version.rb' 6 | 7 | Gem::Specification.new do |spec| 8 | spec.name = 'cocoapods-frost' 9 | spec.version = CocoapodsFrost::VERSION 10 | spec.authors = ['Hiroshi Kimura - Muukii'] 11 | spec.license = 'MIT' 12 | spec.summary = '' 13 | spec.description = <<~DESC 14 | DESC 15 | spec.homepage = 'https://github.com/muukii/cocoapods-frost' 16 | spec.files = './lib/**/*.rb' #`git ls-files`.split($INPUT_RECORD_SEPARATOR) 17 | spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) 18 | spec.require_paths = ['lib'] 19 | 20 | spec.required_ruby_version = '>= 2.5.0' 21 | 22 | spec.add_dependency 'cocoapods', '>= 1.10', '< 2.0' 23 | spec.add_dependency 'concurrent-ruby' 24 | 25 | spec.add_development_dependency 'bundler', '~> 2.0' 26 | end 27 | -------------------------------------------------------------------------------- /lib/cocoapods-frost/DSL.rb: -------------------------------------------------------------------------------- 1 | require_relative './shared_flags.rb' 2 | 3 | module Pod 4 | class Podfile 5 | module DSL 6 | 7 | def frost_pod(name, *args) 8 | 9 | # use_binary = false 10 | # args.each do |element| 11 | # unless element[:use_binary] 12 | # element.delete(:use_binary) 13 | # use_binary = true 14 | # end 15 | # end 16 | 17 | $target_names.push(name) 18 | 19 | if $is_in_frost 20 | # TODO: raises an error path pointing generated podspec. 21 | pod(name, *args) 22 | else 23 | 24 | regex_for_subspec_specifier = /\/.*/ 25 | unless regex_for_subspec_specifier.match(name).nil? 26 | Pod::UI.puts "[Frost] #{name} Specifying subspecs converts to whole installing." 27 | name = name.gsub(regex_for_subspec_specifier, "") 28 | end 29 | 30 | Pod::UI.puts "📦 #{name} Use XCFramework" 31 | # drop args and use path to install local pod instead. 32 | pod(name, path: "./FrostPods/GeneratedPods/#{name}") 33 | end 34 | end 35 | 36 | end 37 | end 38 | end -------------------------------------------------------------------------------- /lib/cocoapods-frost/build.rb: -------------------------------------------------------------------------------- 1 | 2 | module CocoapodsFrost 3 | 4 | # Returns a path to created xcframework 5 | def self.create_xcframewrok( 6 | output_directory:, 7 | build_directory:, 8 | module_name:, 9 | project_name:, 10 | scheme:, 11 | configuration:, 12 | logs: 13 | ) 14 | 15 | logs.push "🚜 #{module_name} -> #{configuration} Building into #{output_directory}" 16 | 17 | options = [] 18 | 19 | options.push("ENABLE_BITCODE=YES") 20 | options.push("BITCODE_GENERATION_MODE=bitcode") 21 | options.push("OTHER_CFLAGS=-fembed-bitcode") 22 | options.push("BUILD_LIBRARY_FOR_DISTRIBUTION=false") 23 | options.push("SKIP_INSTALL=NO") 24 | options.push("DEBUG_INFORMATION_FORMAT=dwarf-with-dsym") 25 | options.push("ONLY_ACTIVE_ARCH=NO") 26 | 27 | # FileUtils.mkdir_p 28 | 29 | archive_path_ios = File.join(build_directory, "#{module_name}/ios.xcarchive") 30 | archive_path_ios_simulator = File.join(build_directory, "#{module_name}/ios-simulator.xcarchive") 31 | 32 | xcodebuild( 33 | projectName: project_name, 34 | scheme: scheme, 35 | configuration: configuration, 36 | destination: "generic/platform=iOS", 37 | sdk: "iphoneos", 38 | archivePath: archive_path_ios, 39 | derivedDataPath: File.join(build_directory, "#{module_name}"), 40 | otherOptions: options 41 | ) 42 | logs.push "[iOS] Build succeeded" 43 | 44 | xcodebuild( 45 | projectName: project_name, 46 | scheme: scheme, 47 | configuration: configuration, 48 | destination: "generic/platform=iOS Simulator", 49 | sdk: "iphonesimulator", 50 | archivePath: archive_path_ios_simulator, 51 | derivedDataPath: File.join(build_directory, "#{module_name}"), 52 | otherOptions: options 53 | ) 54 | logs.push "[iOS Simulator] Build succeeded" 55 | 56 | # https://github.com/madsolar8582/SLRNetworkMonitor/blob/e415fc6399aa164ab8b147a6476630b2418d1d75/release.sh#L73 57 | 58 | args = [] 59 | 60 | instance_eval do 61 | bitcodePaths = Dir.glob(File.join(archive_path_ios, "/**/*.bcsymbolmap")) 62 | 63 | archivePath = archive_path_ios 64 | 65 | dSYMPath = "#{archivePath}/dSYMs/#{module_name}.framework.dSYM" 66 | 67 | args.push("-framework \"#{archivePath}/Products/Library/Frameworks/#{module_name}.framework\"") 68 | 69 | if Dir.exist? dSYMPath 70 | args.push("-debug-symbols \"#{archivePath}/dSYMs/#{module_name}.framework.dSYM\"") 71 | end 72 | 73 | args += bitcodePaths.map { |e| 74 | "-debug-symbols \"#{e}\"" 75 | } 76 | end 77 | 78 | instance_eval do 79 | archivePath = archive_path_ios_simulator 80 | dSYMPath = "#{archivePath}/dSYMs/#{module_name}.framework.dSYM" 81 | 82 | args.push("-framework \"#{archivePath}/Products/Library/Frameworks/#{module_name}.framework\"") 83 | if Dir.exist? dSYMPath 84 | args.push("-debug-symbols \"#{archivePath}/dSYMs/#{module_name}.framework.dSYM\"") 85 | end 86 | end 87 | 88 | output = File.join(output_directory, "#{module_name}.xcframework") 89 | 90 | args.push("-output #{output}") 91 | 92 | if File.exist?(output) 93 | FileUtils.rm_rf(output) 94 | end 95 | 96 | command = "xcodebuild -create-xcframework -allow-internal-distribution #{args.join(" \\\n")}" 97 | 98 | # puts command 99 | 100 | log = `#{command}` 101 | 102 | if File.exist? output 103 | logs.push "✅ Making XCFramework succeeded: #{output}\n" 104 | else 105 | logs.push "❌ Making XCFramework failed\n" 106 | logs.push log 107 | end 108 | 109 | output 110 | end 111 | 112 | def self.xcodebuild( 113 | projectName:, 114 | scheme:, 115 | configuration:, 116 | destination:, 117 | sdk:, 118 | archivePath:, 119 | derivedDataPath:, 120 | otherOptions: 121 | ) 122 | args = %W(-project "#{projectName}" -scheme "#{scheme}" -configuration "#{configuration}" -sdk "#{sdk}" -destination "#{destination}" -archivePath "#{archivePath}" -derivedDataPath "#{derivedDataPath}") 123 | args += otherOptions 124 | command = "xcodebuild archive #{args.join(" ")}" 125 | 126 | # puts command 127 | 128 | log = `#{command} 2>&1` 129 | 130 | exit_code = $?.exitstatus # Process::Status 131 | is_succeed = (exit_code == 0) 132 | 133 | if !is_succeed 134 | begin 135 | if log.include?("** BUILD FAILED **") 136 | # use xcpretty to print build log 137 | # 64 represent command invalid. http://www.manpagez.com/man/3/sysexits/ 138 | printer = XCPretty::Printer.new({ :formatter => XCPretty::Simple, :colorize => "auto" }) 139 | log.each_line do |line| 140 | printer.pretty_print(line) 141 | end 142 | else 143 | raise "shouldn't be handle by xcpretty" 144 | end 145 | rescue 146 | puts log.red 147 | end 148 | end 149 | [is_succeed, log] 150 | end 151 | end -------------------------------------------------------------------------------- /lib/cocoapods-frost/command/frost.rb: -------------------------------------------------------------------------------- 1 | 2 | require_relative '../build.rb' 3 | require_relative '../shared_flags.rb' 4 | require 'fileutils' 5 | require 'concurrent' 6 | 7 | $DEFAULT_SWIFT_VERSION = "5" 8 | 9 | module Pod 10 | class Command 11 | class Frost < Command 12 | 13 | ## 14 | # Make it can access to the configuration 15 | # `config` 16 | include Pod::Config::Mixin 17 | 18 | self.summary = "Frost is a plugin for CocoaPods that creates XCFramework(for internal distribution) for speeding up build time." 19 | 20 | def self.options 21 | [ 22 | # ["--sources=#{Pod::TrunkSource::TRUNK_REPO_URL}", 'The sources from which to update dependent pods. ' \ 23 | # 'Multiple sources must be comma-delimited'], 24 | ['--update-pods=podName', 'Pods to exclude during update. Multiple pods must be comma-delimited'], 25 | # ['--clean-install', 'Ignore the contents of the project cache and force a full pod installation. This only ' \ 26 | # 'applies to projects that have enabled incremental installation'], 27 | ].concat(super) 28 | end 29 | 30 | def initialize(argv) 31 | @pods_to_update = argv.option('update-pods', '').split(',') 32 | super 33 | end 34 | ## 35 | # The entrypoint of this command 36 | def run 37 | $is_in_frost = true 38 | 39 | install 40 | end 41 | 42 | private 43 | 44 | def install 45 | 46 | working_directory = Pathname.new(File.join(config.project_root, "FrostPods")) 47 | 48 | FileUtils.mkdir_p(working_directory) 49 | 50 | gitignore_path = working_directory.join(".gitignore") 51 | 52 | # makes .gitignore file in FrostPods 53 | unless gitignore_path.exist? 54 | File.write(gitignore_path, %{ 55 | build 56 | out 57 | Pods 58 | }) 59 | end 60 | 61 | sandbox = Sandbox.new(working_directory.join("Pods")) 62 | 63 | podfile = Pod::Podfile.from_file(File.join(config.project_root, "./Podfile")) 64 | 65 | lockfile_path = File.join(config.project_root, "./FrostPodfile.lock") 66 | lockfile = Pod::Lockfile.from_file(Pathname.new(lockfile_path)) 67 | 68 | # Before install 69 | 70 | installer = Installer.new(sandbox, podfile, lockfile) 71 | 72 | installer.repo_update = @pods_to_update.any? 73 | installer.update = { 74 | :pods => @pods_to_update 75 | } 76 | 77 | installer.podfile.installation_options.integrate_targets = false 78 | installer.podfile.installation_options.warn_for_multiple_pod_sources = false 79 | installer.podfile.installation_options.deterministic_uuids = false 80 | installer.podfile.installation_options.generate_multiple_pod_projects = false 81 | installer.podfile.installation_options.incremental_installation = false 82 | 83 | # Install procedure manuall instead of using install! 84 | # No validation. 85 | 86 | installer.prepare 87 | installer.resolve_dependencies 88 | installer.download_dependencies 89 | 90 | # Supports unknown swift-version pods 91 | installer.pod_targets.filter(&:uses_swift?).each do |target| 92 | if target.spec_swift_versions.empty? 93 | ## Redfine method 94 | ## For specifying swift-version in Pods project 95 | def target.spec_swift_versions 96 | [Pod::Version.new($DEFAULT_SWIFT_VERSION)] 97 | end 98 | end 99 | end 100 | 101 | installer.integrate 102 | 103 | # for now, calling methods of install inside to prevent validating. 104 | # Pod that no swift-version raises an error while validation 105 | generated_lockfile = installer.send(:generate_lockfile) 106 | 107 | generated_lockfile.write_to_disk(Pathname(lockfile_path)) 108 | 109 | # After install 110 | 111 | $target_names = $target_names.uniq 112 | 113 | targets = installer 114 | .pod_targets 115 | .select { |target| 116 | $target_names.any? { |name| name.start_with?(target.name) } 117 | } 118 | 119 | # validate 120 | targets.each { |target| 121 | 122 | hasBundle = !target.resource_paths.filter { |key, value| !value.empty? }.empty? 123 | 124 | # if hasBundle 125 | # puts "#{pod.name} has bundle" 126 | # pod.resource_paths.each { |key, value| 127 | # puts " #{value}" 128 | # } 129 | # end 130 | 131 | if hasBundle 132 | raise "[#{target.name}] Currently not supported building pod which includes resources." 133 | end 134 | } 135 | 136 | log_targets(targets, $target_names) 137 | 138 | FileUtils.rm_rf(working_directory.join("GeneratedPods")) 139 | 140 | pool = Concurrent::FixedThreadPool.new(4) 141 | 142 | tasks = targets.select { |t| t.should_build? }.map { |target| 143 | Concurrent::Promises.delay_on(pool) { 144 | build( 145 | working_directory: working_directory, 146 | xcodeproject_path: sandbox.project_path.realdirpath, 147 | target: target 148 | ) 149 | } 150 | } 151 | 152 | Pod::UI.puts "🚜 Start building..." 153 | 154 | # TODO: throttle number of threads 155 | Concurrent::Promises.zip(*tasks).value! 156 | 157 | Pod::UI.puts "🚀 Frost completed" 158 | Pod::UI.puts "Next: pod install" 159 | 160 | end 161 | 162 | end 163 | end 164 | end 165 | 166 | def build( 167 | working_directory:, 168 | xcodeproject_path:, 169 | target: 170 | ) 171 | 172 | logs = [] 173 | 174 | # For Debugging before building 175 | generate_podspec_for_xcframework( 176 | target: target, 177 | xcframework_path: "" 178 | ) 179 | 180 | ## Prepare directory 181 | pod_directory = working_directory.join("./GeneratedPods/#{target.root_spec.name}") 182 | 183 | FileUtils.rm_rf(pod_directory) 184 | FileUtils.mkdir_p(pod_directory) 185 | 186 | ## Build XCFramework 187 | configuration = "Release" 188 | 189 | build_logs = [] 190 | 191 | xcframework_path = CocoapodsFrost.create_xcframewrok( 192 | output_directory: pod_directory, 193 | build_directory: working_directory.join("./build"), 194 | module_name: target.product_module_name, 195 | project_name: xcodeproject_path, 196 | scheme: target.label, 197 | configuration: configuration, 198 | logs: build_logs 199 | ) 200 | 201 | ## Generated podspec.json 202 | podspec = generate_podspec_for_xcframework( 203 | target: target, 204 | xcframework_path: Pathname(xcframework_path).relative_path_from(pod_directory) 205 | ) 206 | 207 | ## Make a original podspec file 208 | File.write(pod_directory.join("original-podspec-#{target.name}.json"), target.root_spec.to_pretty_json) 209 | 210 | ## Make a podspec file 211 | File.write(pod_directory.join("#{podspec.name}.podspec.json"), podspec.to_pretty_json) 212 | 213 | ## Copy license files into the directory 214 | target.file_accessors.each do |a| 215 | FileUtils.cp(a.license, pod_directory) if a.license.nil? == false && File.exist?(a.license) 216 | end 217 | 218 | logs.push("Created #{pod_directory}") 219 | 220 | Pod::UI.puts "#{logs.join("\n")}\n#{build_logs.map { |s| " #{s}"}.join("\n")}" 221 | 222 | end 223 | 224 | # Returns attributes for podspec 225 | def generate_podspec_for_xcframework(target:, xcframework_path:) 226 | 227 | podspec = target.root_spec.clone 228 | 229 | if podspec.subspecs.empty? 230 | podspec.attributes_hash.delete('source_files') 231 | 232 | podspec.attributes_hash["vendored_frameworks"] = ["#{xcframework_path}"] 233 | else 234 | 235 | ## Finds depedencies by specified subspecs 236 | using_subspecs = podspec 237 | .subspecs 238 | .filter { |s| 239 | target.library_specs 240 | .any? { |l| l.name == s.name } 241 | } 242 | 243 | ## Merge into one hash from all of dependencies 244 | dependencies_hash = podspec.attributes_hash["dependencies"] || {} 245 | frameworks = [] 246 | 247 | using_subspecs.each do |spec| 248 | 249 | ## Gathering dependencies without its subspec 250 | dependencies = spec.attributes_hash["dependencies"] || {} 251 | dependencies.delete_if { |key, _| 252 | key.start_with?(podspec.name) 253 | } 254 | dependencies_hash = dependencies_hash.merge(dependencies) 255 | 256 | ## Gathering frameworks needs to link dynamically 257 | _frameworks = spec.attributes_hash["frameworks"] 258 | unless _frameworks.nil? 259 | if _frameworks.kind_of?(Array) 260 | frameworks += _frameworks 261 | else 262 | frameworks.push(_frameworks) 263 | end 264 | end 265 | 266 | end 267 | 268 | frameworks = frameworks.uniq 269 | 270 | podspec.attributes_hash["dependencies"] = dependencies_hash 271 | podspec.attributes_hash["frameworks"] = frameworks 272 | 273 | podspec.subspecs = [] 274 | podspec.attributes_hash.delete("default_subspecs") 275 | 276 | podspec.attributes_hash["vendored_frameworks"] = ["#{xcframework_path}"] 277 | 278 | end 279 | 280 | return podspec 281 | end 282 | 283 | def log_targets(targets, target_names) 284 | Pod::UI.puts "Target graph to create xcramework." 285 | Pod::UI.puts "🗞 means building from source. specify `frost_pod ` to create xcframework" 286 | targets.each { |t| 287 | 288 | dependencies = [] 289 | 290 | def print_pods(array, pod) 291 | array.push(pod.name) 292 | pod.dependent_targets.each { |d| 293 | print_pods(array, d) 294 | } 295 | end 296 | 297 | t.dependent_targets.each { |d| 298 | print_pods(dependencies, d) 299 | } 300 | 301 | dependencies = dependencies.uniq 302 | 303 | if t.should_build? 304 | Pod::UI.puts "📦 #{t.name}" 305 | else 306 | Pod::UI.puts "🎯 #{t.name} (this is an aggregate target, not to build)" 307 | end 308 | Pod::UI.puts dependencies 309 | .map { |d| 310 | if target_names.any? { |name| name.start_with?(d) } 311 | " 📦 #{d}" 312 | else 313 | " 🗞 #{d}" 314 | end 315 | } 316 | .join("\n") 317 | } 318 | end -------------------------------------------------------------------------------- /lib/cocoapods-frost/gem_version.rb: -------------------------------------------------------------------------------- 1 | 2 | module CocoapodsFrost 3 | VERSION = '1.0.0' 4 | end 5 | -------------------------------------------------------------------------------- /lib/cocoapods-frost/shared_flags.rb: -------------------------------------------------------------------------------- 1 | 2 | $is_in_frost = false 3 | $target_names = [] -------------------------------------------------------------------------------- /lib/cocoapods_.frost.rb: -------------------------------------------------------------------------------- 1 | 2 | require 'cocoapods-frost/gem_version' 3 | -------------------------------------------------------------------------------- /lib/cocoapods_plugin.rb: -------------------------------------------------------------------------------- 1 | puts "❄️ Loaded cocoapods-frost" 2 | 3 | require 'cocoapods-frost/command/frost.rb' 4 | require 'cocoapods-frost/DSL.rb' 5 | -------------------------------------------------------------------------------- /local_pod.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'bundler/setup' 4 | require 'cocoapods' 5 | 6 | load Gem.bin_path('cocoapods', 'pod') 7 | --------------------------------------------------------------------------------