├── .gitignore ├── FatApp ├── FatApp.xcodeproj │ ├── project.pbxproj │ └── xcshareddata │ │ └── xcschemes │ │ └── FatApp.xcscheme └── FatApp │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── CA.h │ ├── CA.m │ ├── CB.h │ ├── CB.m │ ├── FatAppLib │ ├── FatAppLib.xcodeproj │ │ └── project.pbxproj │ └── FatAppLib │ │ ├── CC.h │ │ ├── CC.m │ │ ├── CD.h │ │ ├── CD.m │ │ ├── CE.h │ │ ├── CE.m │ │ ├── FatAppLib.h │ │ ├── FatAppLib.m │ │ ├── UIView+Test.h │ │ └── UIView+Test.m │ ├── Info.plist │ ├── ViewController.h │ ├── ViewController.m │ └── main.m ├── LICENSE ├── README.md ├── ThinApp ├── ThinApp.xcodeproj │ ├── project.pbxproj │ └── xcshareddata │ │ └── xcschemes │ │ └── ThinApp.xcscheme └── ThinApp │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ ├── ThinAppLib │ ├── ThinAppLib.xcodeproj │ │ ├── project.pbxproj │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── ThinAppLib.xcscheme │ └── ThinAppLib │ │ ├── CA.h │ │ ├── CA.m │ │ ├── CB.h │ │ ├── CB.m │ │ ├── CC.h │ │ ├── CC.m │ │ ├── CD.h │ │ ├── CD.m │ │ ├── CE.h │ │ ├── CE.m │ │ ├── ThinAppLib.h │ │ ├── ThinAppLib.m │ │ ├── UIView+Test.h │ │ └── UIView+Test.m │ ├── ViewController.h │ ├── ViewController.m │ └── main.m └── YSAppSizeTest.xcworkspace ├── contents.xcworkspacedata └── xcshareddata └── IDEWorkspaceChecks.plist /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xccheckout 23 | *.xcscmblueprint 24 | 25 | ## Obj-C/Swift specific 26 | *.hmap 27 | *.ipa 28 | *.dSYM.zip 29 | *.dSYM 30 | 31 | # CocoaPods 32 | # 33 | # We recommend against adding the Pods directory to your .gitignore. However 34 | # you should judge for yourself, the pros and cons are mentioned at: 35 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 36 | # 37 | # Pods/ 38 | 39 | # Carthage 40 | # 41 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 42 | # Carthage/Checkouts 43 | 44 | Carthage/Build 45 | 46 | # fastlane 47 | # 48 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 49 | # screenshots whenever they are needed. 50 | # For more information about the recommended setup visit: 51 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 52 | 53 | fastlane/report.xml 54 | fastlane/Preview.html 55 | fastlane/screenshots/**/*.png 56 | fastlane/test_output 57 | 58 | # Code Injection 59 | # 60 | # After new code Injection tools there's a generated folder /iOSInjectionProject 61 | # https://github.com/johnno1962/injectionforxcode 62 | 63 | iOSInjectionProject/ 64 | -------------------------------------------------------------------------------- /FatApp/FatApp.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 2055F67D22824C440083C7BF /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 2055F67C22824C440083C7BF /* AppDelegate.m */; }; 11 | 2055F68022824C440083C7BF /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2055F67F22824C440083C7BF /* ViewController.m */; }; 12 | 2055F68322824C440083C7BF /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2055F68122824C440083C7BF /* Main.storyboard */; }; 13 | 2055F68522824C450083C7BF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2055F68422824C450083C7BF /* Assets.xcassets */; }; 14 | 2055F68822824C450083C7BF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2055F68622824C450083C7BF /* LaunchScreen.storyboard */; }; 15 | 2055F68B22824C450083C7BF /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2055F68A22824C450083C7BF /* main.m */; }; 16 | 2055F6AF22824CD70083C7BF /* libFatAppLib.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2055F6AB22824C970083C7BF /* libFatAppLib.a */; }; 17 | 2055F6EF22824D890083C7BF /* CA.m in Sources */ = {isa = PBXBuildFile; fileRef = 2055F6EE22824D890083C7BF /* CA.m */; }; 18 | 2055F6F222824D9E0083C7BF /* CB.m in Sources */ = {isa = PBXBuildFile; fileRef = 2055F6F122824D9E0083C7BF /* CB.m */; }; 19 | /* End PBXBuildFile section */ 20 | 21 | /* Begin PBXContainerItemProxy section */ 22 | 2055F6AA22824C970083C7BF /* PBXContainerItemProxy */ = { 23 | isa = PBXContainerItemProxy; 24 | containerPortal = 2055F6A622824C960083C7BF /* FatAppLib.xcodeproj */; 25 | proxyType = 2; 26 | remoteGlobalIDString = 2055F69A22824C960083C7BF; 27 | remoteInfo = FatAppLib; 28 | }; 29 | 2055F6AC22824CCF0083C7BF /* PBXContainerItemProxy */ = { 30 | isa = PBXContainerItemProxy; 31 | containerPortal = 2055F6A622824C960083C7BF /* FatAppLib.xcodeproj */; 32 | proxyType = 1; 33 | remoteGlobalIDString = 2055F69922824C960083C7BF; 34 | remoteInfo = FatAppLib; 35 | }; 36 | /* End PBXContainerItemProxy section */ 37 | 38 | /* Begin PBXFileReference section */ 39 | 2055F67822824C440083C7BF /* FatApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FatApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; 40 | 2055F67B22824C440083C7BF /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 41 | 2055F67C22824C440083C7BF /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 42 | 2055F67E22824C440083C7BF /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 43 | 2055F67F22824C440083C7BF /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 44 | 2055F68222824C440083C7BF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 45 | 2055F68422824C450083C7BF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 46 | 2055F68722824C450083C7BF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 47 | 2055F68922824C450083C7BF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 48 | 2055F68A22824C450083C7BF /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 49 | 2055F6A622824C960083C7BF /* FatAppLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = FatAppLib.xcodeproj; path = FatAppLib/FatAppLib.xcodeproj; sourceTree = ""; }; 50 | 2055F6ED22824D890083C7BF /* CA.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CA.h; sourceTree = ""; }; 51 | 2055F6EE22824D890083C7BF /* CA.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CA.m; sourceTree = ""; }; 52 | 2055F6F022824D9E0083C7BF /* CB.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CB.h; sourceTree = ""; }; 53 | 2055F6F122824D9E0083C7BF /* CB.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CB.m; sourceTree = ""; }; 54 | /* End PBXFileReference section */ 55 | 56 | /* Begin PBXFrameworksBuildPhase section */ 57 | 2055F67522824C440083C7BF /* Frameworks */ = { 58 | isa = PBXFrameworksBuildPhase; 59 | buildActionMask = 2147483647; 60 | files = ( 61 | 2055F6AF22824CD70083C7BF /* libFatAppLib.a in Frameworks */, 62 | ); 63 | runOnlyForDeploymentPostprocessing = 0; 64 | }; 65 | /* End PBXFrameworksBuildPhase section */ 66 | 67 | /* Begin PBXGroup section */ 68 | 2055F66F22824C440083C7BF = { 69 | isa = PBXGroup; 70 | children = ( 71 | 2055F67A22824C440083C7BF /* FatApp */, 72 | 2055F67922824C440083C7BF /* Products */, 73 | 2055F6AE22824CD70083C7BF /* Frameworks */, 74 | ); 75 | sourceTree = ""; 76 | }; 77 | 2055F67922824C440083C7BF /* Products */ = { 78 | isa = PBXGroup; 79 | children = ( 80 | 2055F67822824C440083C7BF /* FatApp.app */, 81 | ); 82 | name = Products; 83 | sourceTree = ""; 84 | }; 85 | 2055F67A22824C440083C7BF /* FatApp */ = { 86 | isa = PBXGroup; 87 | children = ( 88 | 2055F6A622824C960083C7BF /* FatAppLib.xcodeproj */, 89 | 2055F67B22824C440083C7BF /* AppDelegate.h */, 90 | 2055F67C22824C440083C7BF /* AppDelegate.m */, 91 | 2055F67E22824C440083C7BF /* ViewController.h */, 92 | 2055F67F22824C440083C7BF /* ViewController.m */, 93 | 2055F68122824C440083C7BF /* Main.storyboard */, 94 | 2055F68422824C450083C7BF /* Assets.xcassets */, 95 | 2055F68622824C450083C7BF /* LaunchScreen.storyboard */, 96 | 2055F68922824C450083C7BF /* Info.plist */, 97 | 2055F68A22824C450083C7BF /* main.m */, 98 | 2055F6ED22824D890083C7BF /* CA.h */, 99 | 2055F6EE22824D890083C7BF /* CA.m */, 100 | 2055F6F022824D9E0083C7BF /* CB.h */, 101 | 2055F6F122824D9E0083C7BF /* CB.m */, 102 | ); 103 | path = FatApp; 104 | sourceTree = ""; 105 | }; 106 | 2055F6A722824C960083C7BF /* Products */ = { 107 | isa = PBXGroup; 108 | children = ( 109 | 2055F6AB22824C970083C7BF /* libFatAppLib.a */, 110 | ); 111 | name = Products; 112 | sourceTree = ""; 113 | }; 114 | 2055F6AE22824CD70083C7BF /* Frameworks */ = { 115 | isa = PBXGroup; 116 | children = ( 117 | ); 118 | name = Frameworks; 119 | sourceTree = ""; 120 | }; 121 | /* End PBXGroup section */ 122 | 123 | /* Begin PBXNativeTarget section */ 124 | 2055F67722824C440083C7BF /* FatApp */ = { 125 | isa = PBXNativeTarget; 126 | buildConfigurationList = 2055F68E22824C450083C7BF /* Build configuration list for PBXNativeTarget "FatApp" */; 127 | buildPhases = ( 128 | 2055F67422824C440083C7BF /* Sources */, 129 | 2055F67522824C440083C7BF /* Frameworks */, 130 | 2055F67622824C440083C7BF /* Resources */, 131 | ); 132 | buildRules = ( 133 | ); 134 | dependencies = ( 135 | 2055F6AD22824CCF0083C7BF /* PBXTargetDependency */, 136 | ); 137 | name = FatApp; 138 | productName = FatApp; 139 | productReference = 2055F67822824C440083C7BF /* FatApp.app */; 140 | productType = "com.apple.product-type.application"; 141 | }; 142 | /* End PBXNativeTarget section */ 143 | 144 | /* Begin PBXProject section */ 145 | 2055F67022824C440083C7BF /* Project object */ = { 146 | isa = PBXProject; 147 | attributes = { 148 | LastUpgradeCheck = 1020; 149 | ORGANIZATIONNAME = Youngsoft; 150 | TargetAttributes = { 151 | 2055F67722824C440083C7BF = { 152 | CreatedOnToolsVersion = 10.2.1; 153 | }; 154 | }; 155 | }; 156 | buildConfigurationList = 2055F67322824C440083C7BF /* Build configuration list for PBXProject "FatApp" */; 157 | compatibilityVersion = "Xcode 9.3"; 158 | developmentRegion = en; 159 | hasScannedForEncodings = 0; 160 | knownRegions = ( 161 | en, 162 | Base, 163 | ); 164 | mainGroup = 2055F66F22824C440083C7BF; 165 | productRefGroup = 2055F67922824C440083C7BF /* Products */; 166 | projectDirPath = ""; 167 | projectReferences = ( 168 | { 169 | ProductGroup = 2055F6A722824C960083C7BF /* Products */; 170 | ProjectRef = 2055F6A622824C960083C7BF /* FatAppLib.xcodeproj */; 171 | }, 172 | ); 173 | projectRoot = ""; 174 | targets = ( 175 | 2055F67722824C440083C7BF /* FatApp */, 176 | ); 177 | }; 178 | /* End PBXProject section */ 179 | 180 | /* Begin PBXReferenceProxy section */ 181 | 2055F6AB22824C970083C7BF /* libFatAppLib.a */ = { 182 | isa = PBXReferenceProxy; 183 | fileType = archive.ar; 184 | path = libFatAppLib.a; 185 | remoteRef = 2055F6AA22824C970083C7BF /* PBXContainerItemProxy */; 186 | sourceTree = BUILT_PRODUCTS_DIR; 187 | }; 188 | /* End PBXReferenceProxy section */ 189 | 190 | /* Begin PBXResourcesBuildPhase section */ 191 | 2055F67622824C440083C7BF /* Resources */ = { 192 | isa = PBXResourcesBuildPhase; 193 | buildActionMask = 2147483647; 194 | files = ( 195 | 2055F68822824C450083C7BF /* LaunchScreen.storyboard in Resources */, 196 | 2055F68522824C450083C7BF /* Assets.xcassets in Resources */, 197 | 2055F68322824C440083C7BF /* Main.storyboard in Resources */, 198 | ); 199 | runOnlyForDeploymentPostprocessing = 0; 200 | }; 201 | /* End PBXResourcesBuildPhase section */ 202 | 203 | /* Begin PBXSourcesBuildPhase section */ 204 | 2055F67422824C440083C7BF /* Sources */ = { 205 | isa = PBXSourcesBuildPhase; 206 | buildActionMask = 2147483647; 207 | files = ( 208 | 2055F68022824C440083C7BF /* ViewController.m in Sources */, 209 | 2055F68B22824C450083C7BF /* main.m in Sources */, 210 | 2055F6F222824D9E0083C7BF /* CB.m in Sources */, 211 | 2055F67D22824C440083C7BF /* AppDelegate.m in Sources */, 212 | 2055F6EF22824D890083C7BF /* CA.m in Sources */, 213 | ); 214 | runOnlyForDeploymentPostprocessing = 0; 215 | }; 216 | /* End PBXSourcesBuildPhase section */ 217 | 218 | /* Begin PBXTargetDependency section */ 219 | 2055F6AD22824CCF0083C7BF /* PBXTargetDependency */ = { 220 | isa = PBXTargetDependency; 221 | name = FatAppLib; 222 | targetProxy = 2055F6AC22824CCF0083C7BF /* PBXContainerItemProxy */; 223 | }; 224 | /* End PBXTargetDependency section */ 225 | 226 | /* Begin PBXVariantGroup section */ 227 | 2055F68122824C440083C7BF /* Main.storyboard */ = { 228 | isa = PBXVariantGroup; 229 | children = ( 230 | 2055F68222824C440083C7BF /* Base */, 231 | ); 232 | name = Main.storyboard; 233 | sourceTree = ""; 234 | }; 235 | 2055F68622824C450083C7BF /* LaunchScreen.storyboard */ = { 236 | isa = PBXVariantGroup; 237 | children = ( 238 | 2055F68722824C450083C7BF /* Base */, 239 | ); 240 | name = LaunchScreen.storyboard; 241 | sourceTree = ""; 242 | }; 243 | /* End PBXVariantGroup section */ 244 | 245 | /* Begin XCBuildConfiguration section */ 246 | 2055F68C22824C450083C7BF /* Debug */ = { 247 | isa = XCBuildConfiguration; 248 | buildSettings = { 249 | ALWAYS_SEARCH_USER_PATHS = NO; 250 | CLANG_ANALYZER_NONNULL = YES; 251 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 252 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 253 | CLANG_CXX_LIBRARY = "libc++"; 254 | CLANG_ENABLE_MODULES = YES; 255 | CLANG_ENABLE_OBJC_ARC = YES; 256 | CLANG_ENABLE_OBJC_WEAK = YES; 257 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 258 | CLANG_WARN_BOOL_CONVERSION = YES; 259 | CLANG_WARN_COMMA = YES; 260 | CLANG_WARN_CONSTANT_CONVERSION = YES; 261 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 262 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 263 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 264 | CLANG_WARN_EMPTY_BODY = YES; 265 | CLANG_WARN_ENUM_CONVERSION = YES; 266 | CLANG_WARN_INFINITE_RECURSION = YES; 267 | CLANG_WARN_INT_CONVERSION = YES; 268 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 269 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 270 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 271 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 272 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 273 | CLANG_WARN_STRICT_PROTOTYPES = YES; 274 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 275 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 276 | CLANG_WARN_UNREACHABLE_CODE = YES; 277 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 278 | CODE_SIGN_IDENTITY = "iPhone Developer"; 279 | COPY_PHASE_STRIP = NO; 280 | DEBUG_INFORMATION_FORMAT = dwarf; 281 | ENABLE_STRICT_OBJC_MSGSEND = YES; 282 | ENABLE_TESTABILITY = YES; 283 | GCC_C_LANGUAGE_STANDARD = gnu11; 284 | GCC_DYNAMIC_NO_PIC = NO; 285 | GCC_NO_COMMON_BLOCKS = YES; 286 | GCC_OPTIMIZATION_LEVEL = 0; 287 | GCC_PREPROCESSOR_DEFINITIONS = ( 288 | "DEBUG=1", 289 | "$(inherited)", 290 | ); 291 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 292 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 293 | GCC_WARN_UNDECLARED_SELECTOR = YES; 294 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 295 | GCC_WARN_UNUSED_FUNCTION = YES; 296 | GCC_WARN_UNUSED_VARIABLE = YES; 297 | IPHONEOS_DEPLOYMENT_TARGET = 12.2; 298 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 299 | MTL_FAST_MATH = YES; 300 | ONLY_ACTIVE_ARCH = YES; 301 | SDKROOT = iphoneos; 302 | }; 303 | name = Debug; 304 | }; 305 | 2055F68D22824C450083C7BF /* Release */ = { 306 | isa = XCBuildConfiguration; 307 | buildSettings = { 308 | ALWAYS_SEARCH_USER_PATHS = NO; 309 | CLANG_ANALYZER_NONNULL = YES; 310 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 311 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 312 | CLANG_CXX_LIBRARY = "libc++"; 313 | CLANG_ENABLE_MODULES = YES; 314 | CLANG_ENABLE_OBJC_ARC = YES; 315 | CLANG_ENABLE_OBJC_WEAK = YES; 316 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 317 | CLANG_WARN_BOOL_CONVERSION = YES; 318 | CLANG_WARN_COMMA = YES; 319 | CLANG_WARN_CONSTANT_CONVERSION = YES; 320 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 321 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 322 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 323 | CLANG_WARN_EMPTY_BODY = YES; 324 | CLANG_WARN_ENUM_CONVERSION = YES; 325 | CLANG_WARN_INFINITE_RECURSION = YES; 326 | CLANG_WARN_INT_CONVERSION = YES; 327 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 328 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 329 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 330 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 331 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 332 | CLANG_WARN_STRICT_PROTOTYPES = YES; 333 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 334 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 335 | CLANG_WARN_UNREACHABLE_CODE = YES; 336 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 337 | CODE_SIGN_IDENTITY = "iPhone Developer"; 338 | COPY_PHASE_STRIP = NO; 339 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 340 | ENABLE_NS_ASSERTIONS = NO; 341 | ENABLE_STRICT_OBJC_MSGSEND = YES; 342 | GCC_C_LANGUAGE_STANDARD = gnu11; 343 | GCC_NO_COMMON_BLOCKS = YES; 344 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 345 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 346 | GCC_WARN_UNDECLARED_SELECTOR = YES; 347 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 348 | GCC_WARN_UNUSED_FUNCTION = YES; 349 | GCC_WARN_UNUSED_VARIABLE = YES; 350 | IPHONEOS_DEPLOYMENT_TARGET = 12.2; 351 | MTL_ENABLE_DEBUG_INFO = NO; 352 | MTL_FAST_MATH = YES; 353 | SDKROOT = iphoneos; 354 | VALIDATE_PRODUCT = YES; 355 | }; 356 | name = Release; 357 | }; 358 | 2055F68F22824C450083C7BF /* Debug */ = { 359 | isa = XCBuildConfiguration; 360 | buildSettings = { 361 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 362 | CODE_SIGN_STYLE = Automatic; 363 | DEVELOPMENT_TEAM = BGQ8WB468K; 364 | INFOPLIST_FILE = FatApp/Info.plist; 365 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 366 | LD_RUNPATH_SEARCH_PATHS = ( 367 | "$(inherited)", 368 | "@executable_path/Frameworks", 369 | ); 370 | OTHER_LDFLAGS = "-ObjC"; 371 | PRODUCT_BUNDLE_IDENTIFIER = com.youngsoft.FatApp; 372 | PRODUCT_NAME = "$(TARGET_NAME)"; 373 | TARGETED_DEVICE_FAMILY = "1,2"; 374 | }; 375 | name = Debug; 376 | }; 377 | 2055F69022824C450083C7BF /* Release */ = { 378 | isa = XCBuildConfiguration; 379 | buildSettings = { 380 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 381 | CODE_SIGN_STYLE = Automatic; 382 | DEVELOPMENT_TEAM = BGQ8WB468K; 383 | INFOPLIST_FILE = FatApp/Info.plist; 384 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 385 | LD_RUNPATH_SEARCH_PATHS = ( 386 | "$(inherited)", 387 | "@executable_path/Frameworks", 388 | ); 389 | OTHER_LDFLAGS = "-ObjC"; 390 | PRODUCT_BUNDLE_IDENTIFIER = com.youngsoft.FatApp; 391 | PRODUCT_NAME = "$(TARGET_NAME)"; 392 | TARGETED_DEVICE_FAMILY = "1,2"; 393 | }; 394 | name = Release; 395 | }; 396 | /* End XCBuildConfiguration section */ 397 | 398 | /* Begin XCConfigurationList section */ 399 | 2055F67322824C440083C7BF /* Build configuration list for PBXProject "FatApp" */ = { 400 | isa = XCConfigurationList; 401 | buildConfigurations = ( 402 | 2055F68C22824C450083C7BF /* Debug */, 403 | 2055F68D22824C450083C7BF /* Release */, 404 | ); 405 | defaultConfigurationIsVisible = 0; 406 | defaultConfigurationName = Release; 407 | }; 408 | 2055F68E22824C450083C7BF /* Build configuration list for PBXNativeTarget "FatApp" */ = { 409 | isa = XCConfigurationList; 410 | buildConfigurations = ( 411 | 2055F68F22824C450083C7BF /* Debug */, 412 | 2055F69022824C450083C7BF /* Release */, 413 | ); 414 | defaultConfigurationIsVisible = 0; 415 | defaultConfigurationName = Release; 416 | }; 417 | /* End XCConfigurationList section */ 418 | }; 419 | rootObject = 2055F67022824C440083C7BF /* Project object */; 420 | } 421 | -------------------------------------------------------------------------------- /FatApp/FatApp.xcodeproj/xcshareddata/xcschemes/FatApp.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /FatApp/FatApp/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // FatApp 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /FatApp/FatApp/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // FatApp 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | @interface AppDelegate () 12 | 13 | @end 14 | 15 | @implementation AppDelegate 16 | 17 | 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 19 | // Override point for customization after application launch. 20 | 21 | 22 | return YES; 23 | } 24 | 25 | 26 | - (void)applicationWillResignActive:(UIApplication *)application { 27 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 28 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 29 | } 30 | 31 | 32 | - (void)applicationDidEnterBackground:(UIApplication *)application { 33 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 34 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 35 | } 36 | 37 | 38 | - (void)applicationWillEnterForeground:(UIApplication *)application { 39 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 40 | } 41 | 42 | 43 | - (void)applicationDidBecomeActive:(UIApplication *)application { 44 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 45 | } 46 | 47 | 48 | - (void)applicationWillTerminate:(UIApplication *)application { 49 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 50 | } 51 | 52 | 53 | @end 54 | -------------------------------------------------------------------------------- /FatApp/FatApp/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } -------------------------------------------------------------------------------- /FatApp/FatApp/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /FatApp/FatApp/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /FatApp/FatApp/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /FatApp/FatApp/CA.h: -------------------------------------------------------------------------------- 1 | // 2 | // CA.h 3 | // FatApp 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | //这个类会被链接 14 | @interface CA : NSObject 15 | 16 | -(void)fnCA; 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /FatApp/FatApp/CA.m: -------------------------------------------------------------------------------- 1 | // 2 | // CA.m 3 | // FatApp 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import "CA.h" 10 | 11 | @implementation CA 12 | 13 | -(void)fnCA 14 | { 15 | NSLog(@"This is fnCA"); 16 | } 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /FatApp/FatApp/CB.h: -------------------------------------------------------------------------------- 1 | // 2 | // CB.h 3 | // FatApp 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | //这个类会被链接,在主程序中,虽然没有被调用但是还是被链接了。 14 | @interface CB : NSObject 15 | 16 | -(void)fnCB; 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /FatApp/FatApp/CB.m: -------------------------------------------------------------------------------- 1 | // 2 | // CB.m 3 | // FatApp 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import "CB.h" 10 | 11 | @implementation CB 12 | 13 | -(void)fnCB 14 | { 15 | NSLog(@"This is fnCB"); 16 | } 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /FatApp/FatApp/FatAppLib/FatAppLib.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 2055F69F22824C960083C7BF /* FatAppLib.m in Sources */ = {isa = PBXBuildFile; fileRef = 2055F69E22824C960083C7BF /* FatAppLib.m */; }; 11 | 2055F6A022824C960083C7BF /* FatAppLib.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 2055F69D22824C960083C7BF /* FatAppLib.h */; }; 12 | 2055F6F522824DC50083C7BF /* CC.m in Sources */ = {isa = PBXBuildFile; fileRef = 2055F6F422824DC50083C7BF /* CC.m */; }; 13 | 2055F6F822824E2A0083C7BF /* CD.m in Sources */ = {isa = PBXBuildFile; fileRef = 2055F6F722824E2A0083C7BF /* CD.m */; }; 14 | 2055F6FB22824E410083C7BF /* CE.m in Sources */ = {isa = PBXBuildFile; fileRef = 2055F6FA22824E410083C7BF /* CE.m */; }; 15 | 2055F6FE22824E860083C7BF /* UIView+Test.m in Sources */ = {isa = PBXBuildFile; fileRef = 2055F6FD22824E860083C7BF /* UIView+Test.m */; }; 16 | /* End PBXBuildFile section */ 17 | 18 | /* Begin PBXCopyFilesBuildPhase section */ 19 | 2055F69822824C960083C7BF /* CopyFiles */ = { 20 | isa = PBXCopyFilesBuildPhase; 21 | buildActionMask = 2147483647; 22 | dstPath = "include/$(PRODUCT_NAME)"; 23 | dstSubfolderSpec = 16; 24 | files = ( 25 | 2055F6A022824C960083C7BF /* FatAppLib.h in CopyFiles */, 26 | ); 27 | runOnlyForDeploymentPostprocessing = 0; 28 | }; 29 | /* End PBXCopyFilesBuildPhase section */ 30 | 31 | /* Begin PBXFileReference section */ 32 | 2055F69A22824C960083C7BF /* libFatAppLib.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libFatAppLib.a; sourceTree = BUILT_PRODUCTS_DIR; }; 33 | 2055F69D22824C960083C7BF /* FatAppLib.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FatAppLib.h; sourceTree = ""; }; 34 | 2055F69E22824C960083C7BF /* FatAppLib.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FatAppLib.m; sourceTree = ""; }; 35 | 2055F6F322824DC50083C7BF /* CC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CC.h; sourceTree = ""; }; 36 | 2055F6F422824DC50083C7BF /* CC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CC.m; sourceTree = ""; }; 37 | 2055F6F622824E2A0083C7BF /* CD.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CD.h; sourceTree = ""; }; 38 | 2055F6F722824E2A0083C7BF /* CD.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CD.m; sourceTree = ""; }; 39 | 2055F6F922824E410083C7BF /* CE.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CE.h; sourceTree = ""; }; 40 | 2055F6FA22824E410083C7BF /* CE.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CE.m; sourceTree = ""; }; 41 | 2055F6FC22824E860083C7BF /* UIView+Test.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIView+Test.h"; sourceTree = ""; }; 42 | 2055F6FD22824E860083C7BF /* UIView+Test.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIView+Test.m"; sourceTree = ""; }; 43 | /* End PBXFileReference section */ 44 | 45 | /* Begin PBXFrameworksBuildPhase section */ 46 | 2055F69722824C960083C7BF /* Frameworks */ = { 47 | isa = PBXFrameworksBuildPhase; 48 | buildActionMask = 2147483647; 49 | files = ( 50 | ); 51 | runOnlyForDeploymentPostprocessing = 0; 52 | }; 53 | /* End PBXFrameworksBuildPhase section */ 54 | 55 | /* Begin PBXGroup section */ 56 | 2055F69122824C960083C7BF = { 57 | isa = PBXGroup; 58 | children = ( 59 | 2055F69C22824C960083C7BF /* FatAppLib */, 60 | 2055F69B22824C960083C7BF /* Products */, 61 | ); 62 | sourceTree = ""; 63 | }; 64 | 2055F69B22824C960083C7BF /* Products */ = { 65 | isa = PBXGroup; 66 | children = ( 67 | 2055F69A22824C960083C7BF /* libFatAppLib.a */, 68 | ); 69 | name = Products; 70 | sourceTree = ""; 71 | }; 72 | 2055F69C22824C960083C7BF /* FatAppLib */ = { 73 | isa = PBXGroup; 74 | children = ( 75 | 2055F69D22824C960083C7BF /* FatAppLib.h */, 76 | 2055F69E22824C960083C7BF /* FatAppLib.m */, 77 | 2055F6F322824DC50083C7BF /* CC.h */, 78 | 2055F6F422824DC50083C7BF /* CC.m */, 79 | 2055F6F622824E2A0083C7BF /* CD.h */, 80 | 2055F6F722824E2A0083C7BF /* CD.m */, 81 | 2055F6F922824E410083C7BF /* CE.h */, 82 | 2055F6FA22824E410083C7BF /* CE.m */, 83 | 2055F6FC22824E860083C7BF /* UIView+Test.h */, 84 | 2055F6FD22824E860083C7BF /* UIView+Test.m */, 85 | ); 86 | path = FatAppLib; 87 | sourceTree = ""; 88 | }; 89 | /* End PBXGroup section */ 90 | 91 | /* Begin PBXNativeTarget section */ 92 | 2055F69922824C960083C7BF /* FatAppLib */ = { 93 | isa = PBXNativeTarget; 94 | buildConfigurationList = 2055F6A322824C960083C7BF /* Build configuration list for PBXNativeTarget "FatAppLib" */; 95 | buildPhases = ( 96 | 2055F69622824C960083C7BF /* Sources */, 97 | 2055F69722824C960083C7BF /* Frameworks */, 98 | 2055F69822824C960083C7BF /* CopyFiles */, 99 | ); 100 | buildRules = ( 101 | ); 102 | dependencies = ( 103 | ); 104 | name = FatAppLib; 105 | productName = FatAppLib; 106 | productReference = 2055F69A22824C960083C7BF /* libFatAppLib.a */; 107 | productType = "com.apple.product-type.library.static"; 108 | }; 109 | /* End PBXNativeTarget section */ 110 | 111 | /* Begin PBXProject section */ 112 | 2055F69222824C960083C7BF /* Project object */ = { 113 | isa = PBXProject; 114 | attributes = { 115 | LastUpgradeCheck = 1020; 116 | ORGANIZATIONNAME = Youngsoft; 117 | TargetAttributes = { 118 | 2055F69922824C960083C7BF = { 119 | CreatedOnToolsVersion = 10.2.1; 120 | }; 121 | }; 122 | }; 123 | buildConfigurationList = 2055F69522824C960083C7BF /* Build configuration list for PBXProject "FatAppLib" */; 124 | compatibilityVersion = "Xcode 9.3"; 125 | developmentRegion = en; 126 | hasScannedForEncodings = 0; 127 | knownRegions = ( 128 | en, 129 | ); 130 | mainGroup = 2055F69122824C960083C7BF; 131 | productRefGroup = 2055F69B22824C960083C7BF /* Products */; 132 | projectDirPath = ""; 133 | projectRoot = ""; 134 | targets = ( 135 | 2055F69922824C960083C7BF /* FatAppLib */, 136 | ); 137 | }; 138 | /* End PBXProject section */ 139 | 140 | /* Begin PBXSourcesBuildPhase section */ 141 | 2055F69622824C960083C7BF /* Sources */ = { 142 | isa = PBXSourcesBuildPhase; 143 | buildActionMask = 2147483647; 144 | files = ( 145 | 2055F69F22824C960083C7BF /* FatAppLib.m in Sources */, 146 | 2055F6FE22824E860083C7BF /* UIView+Test.m in Sources */, 147 | 2055F6F522824DC50083C7BF /* CC.m in Sources */, 148 | 2055F6F822824E2A0083C7BF /* CD.m in Sources */, 149 | 2055F6FB22824E410083C7BF /* CE.m in Sources */, 150 | ); 151 | runOnlyForDeploymentPostprocessing = 0; 152 | }; 153 | /* End PBXSourcesBuildPhase section */ 154 | 155 | /* Begin XCBuildConfiguration section */ 156 | 2055F6A122824C960083C7BF /* Debug */ = { 157 | isa = XCBuildConfiguration; 158 | buildSettings = { 159 | ALWAYS_SEARCH_USER_PATHS = NO; 160 | CLANG_ANALYZER_NONNULL = YES; 161 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 162 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 163 | CLANG_CXX_LIBRARY = "libc++"; 164 | CLANG_ENABLE_MODULES = YES; 165 | CLANG_ENABLE_OBJC_ARC = YES; 166 | CLANG_ENABLE_OBJC_WEAK = YES; 167 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 168 | CLANG_WARN_BOOL_CONVERSION = YES; 169 | CLANG_WARN_COMMA = YES; 170 | CLANG_WARN_CONSTANT_CONVERSION = YES; 171 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 172 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 173 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 174 | CLANG_WARN_EMPTY_BODY = YES; 175 | CLANG_WARN_ENUM_CONVERSION = YES; 176 | CLANG_WARN_INFINITE_RECURSION = YES; 177 | CLANG_WARN_INT_CONVERSION = YES; 178 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 179 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 180 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 181 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 182 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 183 | CLANG_WARN_STRICT_PROTOTYPES = YES; 184 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 185 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 186 | CLANG_WARN_UNREACHABLE_CODE = YES; 187 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 188 | CODE_SIGN_IDENTITY = "iPhone Developer"; 189 | COPY_PHASE_STRIP = NO; 190 | DEBUG_INFORMATION_FORMAT = dwarf; 191 | ENABLE_STRICT_OBJC_MSGSEND = YES; 192 | ENABLE_TESTABILITY = YES; 193 | GCC_C_LANGUAGE_STANDARD = gnu11; 194 | GCC_DYNAMIC_NO_PIC = NO; 195 | GCC_NO_COMMON_BLOCKS = YES; 196 | GCC_OPTIMIZATION_LEVEL = 0; 197 | GCC_PREPROCESSOR_DEFINITIONS = ( 198 | "DEBUG=1", 199 | "$(inherited)", 200 | ); 201 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 202 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 203 | GCC_WARN_UNDECLARED_SELECTOR = YES; 204 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 205 | GCC_WARN_UNUSED_FUNCTION = YES; 206 | GCC_WARN_UNUSED_VARIABLE = YES; 207 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 208 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 209 | MTL_FAST_MATH = YES; 210 | ONLY_ACTIVE_ARCH = YES; 211 | SDKROOT = iphoneos; 212 | }; 213 | name = Debug; 214 | }; 215 | 2055F6A222824C960083C7BF /* Release */ = { 216 | isa = XCBuildConfiguration; 217 | buildSettings = { 218 | ALWAYS_SEARCH_USER_PATHS = NO; 219 | CLANG_ANALYZER_NONNULL = YES; 220 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 221 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 222 | CLANG_CXX_LIBRARY = "libc++"; 223 | CLANG_ENABLE_MODULES = YES; 224 | CLANG_ENABLE_OBJC_ARC = YES; 225 | CLANG_ENABLE_OBJC_WEAK = YES; 226 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 227 | CLANG_WARN_BOOL_CONVERSION = YES; 228 | CLANG_WARN_COMMA = YES; 229 | CLANG_WARN_CONSTANT_CONVERSION = YES; 230 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 231 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 232 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 233 | CLANG_WARN_EMPTY_BODY = YES; 234 | CLANG_WARN_ENUM_CONVERSION = YES; 235 | CLANG_WARN_INFINITE_RECURSION = YES; 236 | CLANG_WARN_INT_CONVERSION = YES; 237 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 238 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 239 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 240 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 241 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 242 | CLANG_WARN_STRICT_PROTOTYPES = YES; 243 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 244 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 245 | CLANG_WARN_UNREACHABLE_CODE = YES; 246 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 247 | CODE_SIGN_IDENTITY = "iPhone Developer"; 248 | COPY_PHASE_STRIP = NO; 249 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 250 | ENABLE_NS_ASSERTIONS = NO; 251 | ENABLE_STRICT_OBJC_MSGSEND = YES; 252 | GCC_C_LANGUAGE_STANDARD = gnu11; 253 | GCC_NO_COMMON_BLOCKS = YES; 254 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 255 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 256 | GCC_WARN_UNDECLARED_SELECTOR = YES; 257 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 258 | GCC_WARN_UNUSED_FUNCTION = YES; 259 | GCC_WARN_UNUSED_VARIABLE = YES; 260 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 261 | MTL_ENABLE_DEBUG_INFO = NO; 262 | MTL_FAST_MATH = YES; 263 | SDKROOT = iphoneos; 264 | VALIDATE_PRODUCT = YES; 265 | }; 266 | name = Release; 267 | }; 268 | 2055F6A422824C960083C7BF /* Debug */ = { 269 | isa = XCBuildConfiguration; 270 | buildSettings = { 271 | CODE_SIGN_STYLE = Automatic; 272 | DEVELOPMENT_TEAM = BGQ8WB468K; 273 | OTHER_LDFLAGS = "-ObjC"; 274 | PRODUCT_NAME = "$(TARGET_NAME)"; 275 | SKIP_INSTALL = YES; 276 | TARGETED_DEVICE_FAMILY = "1,2"; 277 | }; 278 | name = Debug; 279 | }; 280 | 2055F6A522824C960083C7BF /* Release */ = { 281 | isa = XCBuildConfiguration; 282 | buildSettings = { 283 | CODE_SIGN_STYLE = Automatic; 284 | DEVELOPMENT_TEAM = BGQ8WB468K; 285 | OTHER_LDFLAGS = "-ObjC"; 286 | PRODUCT_NAME = "$(TARGET_NAME)"; 287 | SKIP_INSTALL = YES; 288 | TARGETED_DEVICE_FAMILY = "1,2"; 289 | }; 290 | name = Release; 291 | }; 292 | /* End XCBuildConfiguration section */ 293 | 294 | /* Begin XCConfigurationList section */ 295 | 2055F69522824C960083C7BF /* Build configuration list for PBXProject "FatAppLib" */ = { 296 | isa = XCConfigurationList; 297 | buildConfigurations = ( 298 | 2055F6A122824C960083C7BF /* Debug */, 299 | 2055F6A222824C960083C7BF /* Release */, 300 | ); 301 | defaultConfigurationIsVisible = 0; 302 | defaultConfigurationName = Release; 303 | }; 304 | 2055F6A322824C960083C7BF /* Build configuration list for PBXNativeTarget "FatAppLib" */ = { 305 | isa = XCConfigurationList; 306 | buildConfigurations = ( 307 | 2055F6A422824C960083C7BF /* Debug */, 308 | 2055F6A522824C960083C7BF /* Release */, 309 | ); 310 | defaultConfigurationIsVisible = 0; 311 | defaultConfigurationName = Release; 312 | }; 313 | /* End XCConfigurationList section */ 314 | }; 315 | rootObject = 2055F69222824C960083C7BF /* Project object */; 316 | } 317 | -------------------------------------------------------------------------------- /FatApp/FatApp/FatAppLib/FatAppLib/CC.h: -------------------------------------------------------------------------------- 1 | // 2 | // CC.h 3 | // FatAppLib 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | //这个类会被链接 14 | @interface CC : NSObject 15 | 16 | -(void)fnCC; 17 | 18 | @end 19 | 20 | //虽然CD没有被任何地方调用,但是因为CC被调用,而CD又和CC在同一个文件中定义所以CD也会被链接 21 | @interface CD : NSObject 22 | 23 | -(void)fnCD; 24 | 25 | @end 26 | 27 | NS_ASSUME_NONNULL_END 28 | -------------------------------------------------------------------------------- /FatApp/FatApp/FatAppLib/FatAppLib/CC.m: -------------------------------------------------------------------------------- 1 | // 2 | // CC.m 3 | // FatAppLib 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import "CC.h" 10 | 11 | @implementation CC 12 | 13 | -(void)fnCC 14 | { 15 | NSLog(@"This is fnCC"); 16 | } 17 | 18 | @end 19 | 20 | @implementation CD 21 | 22 | -(void)fnCD 23 | { 24 | NSLog(@"This is fnCD"); 25 | } 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /FatApp/FatApp/FatAppLib/FatAppLib/CD.h: -------------------------------------------------------------------------------- 1 | // 2 | // CD.h 3 | // FatAppLib 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | 14 | 15 | NS_ASSUME_NONNULL_END 16 | -------------------------------------------------------------------------------- /FatApp/FatApp/FatAppLib/FatAppLib/CD.m: -------------------------------------------------------------------------------- 1 | // 2 | // CD.m 3 | // FatAppLib 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import "CD.h" 10 | 11 | 12 | -------------------------------------------------------------------------------- /FatApp/FatApp/FatAppLib/FatAppLib/CE.h: -------------------------------------------------------------------------------- 1 | // 2 | // CE.h 3 | // FatAppLib 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | //CE 在单独文件中被定义,并且不会被调用,但是因为这个工程中添加了-ObjC选项所以还是会被链接进程序中。 14 | @interface CE : NSObject 15 | 16 | -(void)fnCE; 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /FatApp/FatApp/FatAppLib/FatAppLib/CE.m: -------------------------------------------------------------------------------- 1 | // 2 | // CE.m 3 | // FatAppLib 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import "CE.h" 10 | 11 | @implementation CE 12 | 13 | -(void)fnCE 14 | { 15 | NSLog(@"This is fnCE"); 16 | } 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /FatApp/FatApp/FatAppLib/FatAppLib/FatAppLib.h: -------------------------------------------------------------------------------- 1 | // 2 | // FatAppLib.h 3 | // FatAppLib 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "CC.h" 11 | #import "CD.h" 12 | #import "CE.h" 13 | #import "UIView+Test.h" 14 | 15 | 16 | //库中的C函数,会被调用 17 | void libFoo1(); 18 | 19 | //库中的C函数,不会被调用 20 | void libFoo2(); 21 | 22 | -------------------------------------------------------------------------------- /FatApp/FatApp/FatAppLib/FatAppLib/FatAppLib.m: -------------------------------------------------------------------------------- 1 | // 2 | // FatAppLib.m 3 | // FatAppLib 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import "FatAppLib.h" 10 | 11 | void libFoo1() 12 | { 13 | NSLog(@"This is libFoo1"); 14 | } 15 | 16 | void libFoo2() 17 | { 18 | NSLog(@"This is libFoo2"); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /FatApp/FatApp/FatAppLib/FatAppLib/UIView+Test.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+Test.h 3 | // FatAppLib 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | //为了在外部能访问UIView的分类,必须要在主程序中添加 -ObjC选项 14 | @interface UIView (Test) 15 | 16 | -(void)test_UIView; 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /FatApp/FatApp/FatAppLib/FatAppLib/UIView+Test.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+Test.m 3 | // FatAppLib 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import "UIView+Test.h" 10 | 11 | @implementation UIView (Test) 12 | 13 | -(void)test_UIView 14 | { 15 | NSLog(@"This is test_UIView"); 16 | } 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /FatApp/FatApp/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /FatApp/FatApp/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // FatApp 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /FatApp/FatApp/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // FatApp 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import "CA.h" 11 | #import "CB.h" 12 | #import "../FatApp/FatAppLib/FatAppLib/FatAppLib.h" 13 | 14 | 15 | @interface ViewController () 16 | 17 | @end 18 | 19 | @implementation ViewController 20 | 21 | - (void)viewDidLoad { 22 | [super viewDidLoad]; 23 | // Do any additional setup after loading the view. 24 | 25 | //为了能使用UIView的分类,所以工程中添加了-ObjC选项,这样整个工程中的所有OC类都会被链接。 26 | 27 | //实例化CA对象。 28 | CA *pA = [CA new]; 29 | [pA fnCA]; 30 | 31 | //实例化CC对象 32 | CC *pC = [CC new]; 33 | [pC fnCC]; 34 | 35 | //函数调用 36 | libFoo1(); 37 | 38 | //分类调用 39 | [self.view test_UIView]; 40 | } 41 | 42 | 43 | @end 44 | -------------------------------------------------------------------------------- /FatApp/FatApp/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // FatApp 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 欧阳大哥2013 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 | # YSAppSizeTest 2 | Solution of reduce iOS application size(减少iOS应用程序尺寸的解决方案)。 3 | 4 | --- 5 | 6 | 通过对静态库的正确使用,可以有效的减少应用程序包的尺寸,其原理是根据对静态库的编译和链接规则得出来的,详细的原理介绍请参考文章:[深入iOS系统底层之静态库介绍](https://juejin.im/post/5c63906ff265da2ddd4a3fc0)。 7 | 8 | 在本例中的同一个Workspace中分别建立ThinApp和FatApp两个工程,这两个工程实现的功能是一样。在整个应用程序中分别定义了CA、CB、CC、CD、CE一共5个OC类,定义了一个UIView(Test)分类,还有定义了两个C函数:libFoo1和libFoo1。 9 | 10 | 整个应用程序中只使用了CA和CC两个OC类,以及调用了UIView(Test)分类方法,以及调用了libFoo1函数,并且同时都采用导入静态库的形式。但是因为这两个工程对类文件的分布和引用策略不同使得两个应用程序的最终可执行代码的尺寸是不相同的。 11 | 12 | ### FatApp中的文件定义和分布策略 13 | 1. CA,CB两个类都定义在主程序工程中。 14 | 2. CC,CD,CE三个类,以及UIView(Test)分类,还有libFoo1,libFoo2两个函数都定义在FatAppLib静态库工程中。 15 | 3. CC,CD两个类定义在同一个文件中,CE类则定义在单独的文件中。 16 | 3. FatApp工程依赖并导入了FatAppLib静态库工程。 17 | 4. FatApp工程的Other Linker Flags中设置了 -ObjC选项。 18 | 19 | ### ThinApp中的文件定义和分布策略 20 | 1. 主程序工程就是一个壳工程。 21 | 2. CA,CB,CC,CD,CE5个类,以及UIView(Test)分类,还有libFoo1,libFoo2两个函数都定义在ThinAppLib静态库工程中。 22 | 3. 上述的5个类都分别定义在不同的文件中。 23 | 4. ThinApp工程依赖并导入了ThinAppLib静态库工程。 24 | 5. ThinApp工程的Other Linker Flags中没有设置-ObjC选项。 25 | 26 | 27 | 因为上述的两个相同功能的工程的策略不同,在程序被Archive出来后,FatApp可执行程序的尺寸是367KB,而ThinApp可执行程序的尺寸是334KB。通过一些工具比如Mach-O View或者 IDA可以看出:FatApp中5个OC类的代码以及libFoo1函数,还有UIView(Test)分类的代码都被链接进可执行程序中;而ThinApp中则只有CA,CC两个类以及libFoo1函数,还有UIView(Test)分类的代码被链接进可执行程序中。 28 | 29 | 您可以从:[iOS应用程序瘦身的静态库解决方案](https://juejin.im/post/5cd2be66e51d456e831f69e4)一文中详细了解具体的构建规则。 30 | -------------------------------------------------------------------------------- /ThinApp/ThinApp.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 2055F6BE22824D1F0083C7BF /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 2055F6BD22824D1F0083C7BF /* AppDelegate.m */; }; 11 | 2055F6C122824D1F0083C7BF /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2055F6C022824D1F0083C7BF /* ViewController.m */; }; 12 | 2055F6C422824D1F0083C7BF /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2055F6C222824D1F0083C7BF /* Main.storyboard */; }; 13 | 2055F6C622824D200083C7BF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2055F6C522824D200083C7BF /* Assets.xcassets */; }; 14 | 2055F6C922824D200083C7BF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2055F6C722824D200083C7BF /* LaunchScreen.storyboard */; }; 15 | 2055F6CC22824D200083C7BF /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2055F6CB22824D200083C7BF /* main.m */; }; 16 | 2055F71422825FDB0083C7BF /* libThinAppLib.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2055F6EC22824D4C0083C7BF /* libThinAppLib.a */; }; 17 | /* End PBXBuildFile section */ 18 | 19 | /* Begin PBXContainerItemProxy section */ 20 | 2055F6EB22824D4C0083C7BF /* PBXContainerItemProxy */ = { 21 | isa = PBXContainerItemProxy; 22 | containerPortal = 2055F6E722824D4B0083C7BF /* ThinAppLib.xcodeproj */; 23 | proxyType = 2; 24 | remoteGlobalIDString = 2055F6DB22824D4B0083C7BF; 25 | remoteInfo = ThinAppLib; 26 | }; 27 | 2055F71122825FD40083C7BF /* PBXContainerItemProxy */ = { 28 | isa = PBXContainerItemProxy; 29 | containerPortal = 2055F6E722824D4B0083C7BF /* ThinAppLib.xcodeproj */; 30 | proxyType = 1; 31 | remoteGlobalIDString = 2055F6DA22824D4B0083C7BF; 32 | remoteInfo = ThinAppLib; 33 | }; 34 | /* End PBXContainerItemProxy section */ 35 | 36 | /* Begin PBXFileReference section */ 37 | 2055F6B922824D1F0083C7BF /* ThinApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ThinApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; 38 | 2055F6BC22824D1F0083C7BF /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 39 | 2055F6BD22824D1F0083C7BF /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 40 | 2055F6BF22824D1F0083C7BF /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 41 | 2055F6C022824D1F0083C7BF /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 42 | 2055F6C322824D1F0083C7BF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 43 | 2055F6C522824D200083C7BF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 44 | 2055F6C822824D200083C7BF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 45 | 2055F6CA22824D200083C7BF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 46 | 2055F6CB22824D200083C7BF /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 47 | 2055F6E722824D4B0083C7BF /* ThinAppLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ThinAppLib.xcodeproj; path = ThinAppLib/ThinAppLib.xcodeproj; sourceTree = ""; }; 48 | /* End PBXFileReference section */ 49 | 50 | /* Begin PBXFrameworksBuildPhase section */ 51 | 2055F6B622824D1F0083C7BF /* Frameworks */ = { 52 | isa = PBXFrameworksBuildPhase; 53 | buildActionMask = 2147483647; 54 | files = ( 55 | 2055F71422825FDB0083C7BF /* libThinAppLib.a in Frameworks */, 56 | ); 57 | runOnlyForDeploymentPostprocessing = 0; 58 | }; 59 | /* End PBXFrameworksBuildPhase section */ 60 | 61 | /* Begin PBXGroup section */ 62 | 2055F6B022824D1F0083C7BF = { 63 | isa = PBXGroup; 64 | children = ( 65 | 2055F6BB22824D1F0083C7BF /* ThinApp */, 66 | 2055F6BA22824D1F0083C7BF /* Products */, 67 | 2055F71322825FDB0083C7BF /* Frameworks */, 68 | ); 69 | sourceTree = ""; 70 | }; 71 | 2055F6BA22824D1F0083C7BF /* Products */ = { 72 | isa = PBXGroup; 73 | children = ( 74 | 2055F6B922824D1F0083C7BF /* ThinApp.app */, 75 | ); 76 | name = Products; 77 | sourceTree = ""; 78 | }; 79 | 2055F6BB22824D1F0083C7BF /* ThinApp */ = { 80 | isa = PBXGroup; 81 | children = ( 82 | 2055F6E722824D4B0083C7BF /* ThinAppLib.xcodeproj */, 83 | 2055F6BC22824D1F0083C7BF /* AppDelegate.h */, 84 | 2055F6BD22824D1F0083C7BF /* AppDelegate.m */, 85 | 2055F6BF22824D1F0083C7BF /* ViewController.h */, 86 | 2055F6C022824D1F0083C7BF /* ViewController.m */, 87 | 2055F6C222824D1F0083C7BF /* Main.storyboard */, 88 | 2055F6C522824D200083C7BF /* Assets.xcassets */, 89 | 2055F6C722824D200083C7BF /* LaunchScreen.storyboard */, 90 | 2055F6CA22824D200083C7BF /* Info.plist */, 91 | 2055F6CB22824D200083C7BF /* main.m */, 92 | ); 93 | path = ThinApp; 94 | sourceTree = ""; 95 | }; 96 | 2055F6E822824D4B0083C7BF /* Products */ = { 97 | isa = PBXGroup; 98 | children = ( 99 | 2055F6EC22824D4C0083C7BF /* libThinAppLib.a */, 100 | ); 101 | name = Products; 102 | sourceTree = ""; 103 | }; 104 | 2055F71322825FDB0083C7BF /* Frameworks */ = { 105 | isa = PBXGroup; 106 | children = ( 107 | ); 108 | name = Frameworks; 109 | sourceTree = ""; 110 | }; 111 | /* End PBXGroup section */ 112 | 113 | /* Begin PBXNativeTarget section */ 114 | 2055F6B822824D1F0083C7BF /* ThinApp */ = { 115 | isa = PBXNativeTarget; 116 | buildConfigurationList = 2055F6CF22824D200083C7BF /* Build configuration list for PBXNativeTarget "ThinApp" */; 117 | buildPhases = ( 118 | 2055F6B522824D1F0083C7BF /* Sources */, 119 | 2055F6B622824D1F0083C7BF /* Frameworks */, 120 | 2055F6B722824D1F0083C7BF /* Resources */, 121 | ); 122 | buildRules = ( 123 | ); 124 | dependencies = ( 125 | 2055F71222825FD40083C7BF /* PBXTargetDependency */, 126 | ); 127 | name = ThinApp; 128 | productName = ThinApp; 129 | productReference = 2055F6B922824D1F0083C7BF /* ThinApp.app */; 130 | productType = "com.apple.product-type.application"; 131 | }; 132 | /* End PBXNativeTarget section */ 133 | 134 | /* Begin PBXProject section */ 135 | 2055F6B122824D1F0083C7BF /* Project object */ = { 136 | isa = PBXProject; 137 | attributes = { 138 | LastUpgradeCheck = 1020; 139 | ORGANIZATIONNAME = Youngsoft; 140 | TargetAttributes = { 141 | 2055F6B822824D1F0083C7BF = { 142 | CreatedOnToolsVersion = 10.2.1; 143 | }; 144 | }; 145 | }; 146 | buildConfigurationList = 2055F6B422824D1F0083C7BF /* Build configuration list for PBXProject "ThinApp" */; 147 | compatibilityVersion = "Xcode 9.3"; 148 | developmentRegion = en; 149 | hasScannedForEncodings = 0; 150 | knownRegions = ( 151 | en, 152 | Base, 153 | ); 154 | mainGroup = 2055F6B022824D1F0083C7BF; 155 | productRefGroup = 2055F6BA22824D1F0083C7BF /* Products */; 156 | projectDirPath = ""; 157 | projectReferences = ( 158 | { 159 | ProductGroup = 2055F6E822824D4B0083C7BF /* Products */; 160 | ProjectRef = 2055F6E722824D4B0083C7BF /* ThinAppLib.xcodeproj */; 161 | }, 162 | ); 163 | projectRoot = ""; 164 | targets = ( 165 | 2055F6B822824D1F0083C7BF /* ThinApp */, 166 | ); 167 | }; 168 | /* End PBXProject section */ 169 | 170 | /* Begin PBXReferenceProxy section */ 171 | 2055F6EC22824D4C0083C7BF /* libThinAppLib.a */ = { 172 | isa = PBXReferenceProxy; 173 | fileType = archive.ar; 174 | path = libThinAppLib.a; 175 | remoteRef = 2055F6EB22824D4C0083C7BF /* PBXContainerItemProxy */; 176 | sourceTree = BUILT_PRODUCTS_DIR; 177 | }; 178 | /* End PBXReferenceProxy section */ 179 | 180 | /* Begin PBXResourcesBuildPhase section */ 181 | 2055F6B722824D1F0083C7BF /* Resources */ = { 182 | isa = PBXResourcesBuildPhase; 183 | buildActionMask = 2147483647; 184 | files = ( 185 | 2055F6C922824D200083C7BF /* LaunchScreen.storyboard in Resources */, 186 | 2055F6C622824D200083C7BF /* Assets.xcassets in Resources */, 187 | 2055F6C422824D1F0083C7BF /* Main.storyboard in Resources */, 188 | ); 189 | runOnlyForDeploymentPostprocessing = 0; 190 | }; 191 | /* End PBXResourcesBuildPhase section */ 192 | 193 | /* Begin PBXSourcesBuildPhase section */ 194 | 2055F6B522824D1F0083C7BF /* Sources */ = { 195 | isa = PBXSourcesBuildPhase; 196 | buildActionMask = 2147483647; 197 | files = ( 198 | 2055F6C122824D1F0083C7BF /* ViewController.m in Sources */, 199 | 2055F6CC22824D200083C7BF /* main.m in Sources */, 200 | 2055F6BE22824D1F0083C7BF /* AppDelegate.m in Sources */, 201 | ); 202 | runOnlyForDeploymentPostprocessing = 0; 203 | }; 204 | /* End PBXSourcesBuildPhase section */ 205 | 206 | /* Begin PBXTargetDependency section */ 207 | 2055F71222825FD40083C7BF /* PBXTargetDependency */ = { 208 | isa = PBXTargetDependency; 209 | name = ThinAppLib; 210 | targetProxy = 2055F71122825FD40083C7BF /* PBXContainerItemProxy */; 211 | }; 212 | /* End PBXTargetDependency section */ 213 | 214 | /* Begin PBXVariantGroup section */ 215 | 2055F6C222824D1F0083C7BF /* Main.storyboard */ = { 216 | isa = PBXVariantGroup; 217 | children = ( 218 | 2055F6C322824D1F0083C7BF /* Base */, 219 | ); 220 | name = Main.storyboard; 221 | sourceTree = ""; 222 | }; 223 | 2055F6C722824D200083C7BF /* LaunchScreen.storyboard */ = { 224 | isa = PBXVariantGroup; 225 | children = ( 226 | 2055F6C822824D200083C7BF /* Base */, 227 | ); 228 | name = LaunchScreen.storyboard; 229 | sourceTree = ""; 230 | }; 231 | /* End PBXVariantGroup section */ 232 | 233 | /* Begin XCBuildConfiguration section */ 234 | 2055F6CD22824D200083C7BF /* Debug */ = { 235 | isa = XCBuildConfiguration; 236 | buildSettings = { 237 | ALWAYS_SEARCH_USER_PATHS = NO; 238 | CLANG_ANALYZER_NONNULL = YES; 239 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 240 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 241 | CLANG_CXX_LIBRARY = "libc++"; 242 | CLANG_ENABLE_MODULES = YES; 243 | CLANG_ENABLE_OBJC_ARC = YES; 244 | CLANG_ENABLE_OBJC_WEAK = YES; 245 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 246 | CLANG_WARN_BOOL_CONVERSION = YES; 247 | CLANG_WARN_COMMA = YES; 248 | CLANG_WARN_CONSTANT_CONVERSION = YES; 249 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 250 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 251 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 252 | CLANG_WARN_EMPTY_BODY = YES; 253 | CLANG_WARN_ENUM_CONVERSION = YES; 254 | CLANG_WARN_INFINITE_RECURSION = YES; 255 | CLANG_WARN_INT_CONVERSION = YES; 256 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 257 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 258 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 259 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 260 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 261 | CLANG_WARN_STRICT_PROTOTYPES = YES; 262 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 263 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 264 | CLANG_WARN_UNREACHABLE_CODE = YES; 265 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 266 | CODE_SIGN_IDENTITY = "iPhone Developer"; 267 | COPY_PHASE_STRIP = NO; 268 | DEBUG_INFORMATION_FORMAT = dwarf; 269 | ENABLE_STRICT_OBJC_MSGSEND = YES; 270 | ENABLE_TESTABILITY = YES; 271 | GCC_C_LANGUAGE_STANDARD = gnu11; 272 | GCC_DYNAMIC_NO_PIC = NO; 273 | GCC_NO_COMMON_BLOCKS = YES; 274 | GCC_OPTIMIZATION_LEVEL = 0; 275 | GCC_PREPROCESSOR_DEFINITIONS = ( 276 | "DEBUG=1", 277 | "$(inherited)", 278 | ); 279 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 280 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 281 | GCC_WARN_UNDECLARED_SELECTOR = YES; 282 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 283 | GCC_WARN_UNUSED_FUNCTION = YES; 284 | GCC_WARN_UNUSED_VARIABLE = YES; 285 | IPHONEOS_DEPLOYMENT_TARGET = 12.2; 286 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 287 | MTL_FAST_MATH = YES; 288 | ONLY_ACTIVE_ARCH = YES; 289 | SDKROOT = iphoneos; 290 | }; 291 | name = Debug; 292 | }; 293 | 2055F6CE22824D200083C7BF /* Release */ = { 294 | isa = XCBuildConfiguration; 295 | buildSettings = { 296 | ALWAYS_SEARCH_USER_PATHS = NO; 297 | CLANG_ANALYZER_NONNULL = YES; 298 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 299 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 300 | CLANG_CXX_LIBRARY = "libc++"; 301 | CLANG_ENABLE_MODULES = YES; 302 | CLANG_ENABLE_OBJC_ARC = YES; 303 | CLANG_ENABLE_OBJC_WEAK = YES; 304 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 305 | CLANG_WARN_BOOL_CONVERSION = YES; 306 | CLANG_WARN_COMMA = YES; 307 | CLANG_WARN_CONSTANT_CONVERSION = YES; 308 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 309 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 310 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 311 | CLANG_WARN_EMPTY_BODY = YES; 312 | CLANG_WARN_ENUM_CONVERSION = YES; 313 | CLANG_WARN_INFINITE_RECURSION = YES; 314 | CLANG_WARN_INT_CONVERSION = YES; 315 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 316 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 317 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 318 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 319 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 320 | CLANG_WARN_STRICT_PROTOTYPES = YES; 321 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 322 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 323 | CLANG_WARN_UNREACHABLE_CODE = YES; 324 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 325 | CODE_SIGN_IDENTITY = "iPhone Developer"; 326 | COPY_PHASE_STRIP = NO; 327 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 328 | ENABLE_NS_ASSERTIONS = NO; 329 | ENABLE_STRICT_OBJC_MSGSEND = YES; 330 | GCC_C_LANGUAGE_STANDARD = gnu11; 331 | GCC_NO_COMMON_BLOCKS = YES; 332 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 333 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 334 | GCC_WARN_UNDECLARED_SELECTOR = YES; 335 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 336 | GCC_WARN_UNUSED_FUNCTION = YES; 337 | GCC_WARN_UNUSED_VARIABLE = YES; 338 | IPHONEOS_DEPLOYMENT_TARGET = 12.2; 339 | MTL_ENABLE_DEBUG_INFO = NO; 340 | MTL_FAST_MATH = YES; 341 | SDKROOT = iphoneos; 342 | VALIDATE_PRODUCT = YES; 343 | }; 344 | name = Release; 345 | }; 346 | 2055F6D022824D200083C7BF /* Debug */ = { 347 | isa = XCBuildConfiguration; 348 | buildSettings = { 349 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 350 | CODE_SIGN_STYLE = Automatic; 351 | DEVELOPMENT_TEAM = BGQ8WB468K; 352 | INFOPLIST_FILE = ThinApp/Info.plist; 353 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 354 | LD_RUNPATH_SEARCH_PATHS = ( 355 | "$(inherited)", 356 | "@executable_path/Frameworks", 357 | ); 358 | PRODUCT_BUNDLE_IDENTIFIER = com.youngsoft.ThinApp; 359 | PRODUCT_NAME = "$(TARGET_NAME)"; 360 | TARGETED_DEVICE_FAMILY = "1,2"; 361 | }; 362 | name = Debug; 363 | }; 364 | 2055F6D122824D200083C7BF /* Release */ = { 365 | isa = XCBuildConfiguration; 366 | buildSettings = { 367 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 368 | CODE_SIGN_STYLE = Automatic; 369 | DEVELOPMENT_TEAM = BGQ8WB468K; 370 | INFOPLIST_FILE = ThinApp/Info.plist; 371 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 372 | LD_RUNPATH_SEARCH_PATHS = ( 373 | "$(inherited)", 374 | "@executable_path/Frameworks", 375 | ); 376 | PRODUCT_BUNDLE_IDENTIFIER = com.youngsoft.ThinApp; 377 | PRODUCT_NAME = "$(TARGET_NAME)"; 378 | TARGETED_DEVICE_FAMILY = "1,2"; 379 | }; 380 | name = Release; 381 | }; 382 | /* End XCBuildConfiguration section */ 383 | 384 | /* Begin XCConfigurationList section */ 385 | 2055F6B422824D1F0083C7BF /* Build configuration list for PBXProject "ThinApp" */ = { 386 | isa = XCConfigurationList; 387 | buildConfigurations = ( 388 | 2055F6CD22824D200083C7BF /* Debug */, 389 | 2055F6CE22824D200083C7BF /* Release */, 390 | ); 391 | defaultConfigurationIsVisible = 0; 392 | defaultConfigurationName = Release; 393 | }; 394 | 2055F6CF22824D200083C7BF /* Build configuration list for PBXNativeTarget "ThinApp" */ = { 395 | isa = XCConfigurationList; 396 | buildConfigurations = ( 397 | 2055F6D022824D200083C7BF /* Debug */, 398 | 2055F6D122824D200083C7BF /* Release */, 399 | ); 400 | defaultConfigurationIsVisible = 0; 401 | defaultConfigurationName = Release; 402 | }; 403 | /* End XCConfigurationList section */ 404 | }; 405 | rootObject = 2055F6B122824D1F0083C7BF /* Project object */; 406 | } 407 | -------------------------------------------------------------------------------- /ThinApp/ThinApp.xcodeproj/xcshareddata/xcschemes/ThinApp.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // ThinApp 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // ThinApp 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | @interface AppDelegate () 12 | 13 | @end 14 | 15 | @implementation AppDelegate 16 | 17 | 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 19 | // Override point for customization after application launch. 20 | return YES; 21 | } 22 | 23 | 24 | - (void)applicationWillResignActive:(UIApplication *)application { 25 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 26 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 27 | } 28 | 29 | 30 | - (void)applicationDidEnterBackground:(UIApplication *)application { 31 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 32 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 33 | } 34 | 35 | 36 | - (void)applicationWillEnterForeground:(UIApplication *)application { 37 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 38 | } 39 | 40 | 41 | - (void)applicationDidBecomeActive:(UIApplication *)application { 42 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 43 | } 44 | 45 | 46 | - (void)applicationWillTerminate:(UIApplication *)application { 47 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 48 | } 49 | 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } -------------------------------------------------------------------------------- /ThinApp/ThinApp/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ThinApp/ThinApp/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/ThinAppLib/ThinAppLib.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 2055F6E022824D4B0083C7BF /* ThinAppLib.m in Sources */ = {isa = PBXBuildFile; fileRef = 2055F6DF22824D4B0083C7BF /* ThinAppLib.m */; }; 11 | 2055F6E122824D4B0083C7BF /* ThinAppLib.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 2055F6DE22824D4B0083C7BF /* ThinAppLib.h */; }; 12 | 2055F70922825E670083C7BF /* CD.m in Sources */ = {isa = PBXBuildFile; fileRef = 2055F6FF22825E670083C7BF /* CD.m */; }; 13 | 2055F70A22825E670083C7BF /* CC.m in Sources */ = {isa = PBXBuildFile; fileRef = 2055F70122825E670083C7BF /* CC.m */; }; 14 | 2055F70B22825E670083C7BF /* CB.m in Sources */ = {isa = PBXBuildFile; fileRef = 2055F70222825E670083C7BF /* CB.m */; }; 15 | 2055F70C22825E670083C7BF /* CE.m in Sources */ = {isa = PBXBuildFile; fileRef = 2055F70322825E670083C7BF /* CE.m */; }; 16 | 2055F70D22825E670083C7BF /* CA.m in Sources */ = {isa = PBXBuildFile; fileRef = 2055F70822825E670083C7BF /* CA.m */; }; 17 | 2085EB1A228528C400E2C4D1 /* UIView+Test.m in Sources */ = {isa = PBXBuildFile; fileRef = 2085EB19228528C400E2C4D1 /* UIView+Test.m */; }; 18 | /* End PBXBuildFile section */ 19 | 20 | /* Begin PBXCopyFilesBuildPhase section */ 21 | 2055F6D922824D4B0083C7BF /* CopyFiles */ = { 22 | isa = PBXCopyFilesBuildPhase; 23 | buildActionMask = 2147483647; 24 | dstPath = "include/$(PRODUCT_NAME)"; 25 | dstSubfolderSpec = 16; 26 | files = ( 27 | 2055F6E122824D4B0083C7BF /* ThinAppLib.h in CopyFiles */, 28 | ); 29 | runOnlyForDeploymentPostprocessing = 0; 30 | }; 31 | /* End PBXCopyFilesBuildPhase section */ 32 | 33 | /* Begin PBXFileReference section */ 34 | 2055F6DB22824D4B0083C7BF /* libThinAppLib.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libThinAppLib.a; sourceTree = BUILT_PRODUCTS_DIR; }; 35 | 2055F6DE22824D4B0083C7BF /* ThinAppLib.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ThinAppLib.h; sourceTree = ""; }; 36 | 2055F6DF22824D4B0083C7BF /* ThinAppLib.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ThinAppLib.m; sourceTree = ""; }; 37 | 2055F6FF22825E670083C7BF /* CD.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CD.m; sourceTree = ""; }; 38 | 2055F70022825E670083C7BF /* CC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CC.h; sourceTree = ""; }; 39 | 2055F70122825E670083C7BF /* CC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CC.m; sourceTree = ""; }; 40 | 2055F70222825E670083C7BF /* CB.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CB.m; sourceTree = ""; }; 41 | 2055F70322825E670083C7BF /* CE.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CE.m; sourceTree = ""; }; 42 | 2055F70422825E670083C7BF /* CA.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CA.h; sourceTree = ""; }; 43 | 2055F70522825E670083C7BF /* CB.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CB.h; sourceTree = ""; }; 44 | 2055F70622825E670083C7BF /* CE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CE.h; sourceTree = ""; }; 45 | 2055F70722825E670083C7BF /* CD.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CD.h; sourceTree = ""; }; 46 | 2055F70822825E670083C7BF /* CA.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CA.m; sourceTree = ""; }; 47 | 2085EB18228528C400E2C4D1 /* UIView+Test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+Test.h"; sourceTree = ""; }; 48 | 2085EB19228528C400E2C4D1 /* UIView+Test.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+Test.m"; sourceTree = ""; }; 49 | /* End PBXFileReference section */ 50 | 51 | /* Begin PBXFrameworksBuildPhase section */ 52 | 2055F6D822824D4B0083C7BF /* Frameworks */ = { 53 | isa = PBXFrameworksBuildPhase; 54 | buildActionMask = 2147483647; 55 | files = ( 56 | ); 57 | runOnlyForDeploymentPostprocessing = 0; 58 | }; 59 | /* End PBXFrameworksBuildPhase section */ 60 | 61 | /* Begin PBXGroup section */ 62 | 2055F6D222824D4B0083C7BF = { 63 | isa = PBXGroup; 64 | children = ( 65 | 2055F6DD22824D4B0083C7BF /* ThinAppLib */, 66 | 2055F6DC22824D4B0083C7BF /* Products */, 67 | ); 68 | sourceTree = ""; 69 | }; 70 | 2055F6DC22824D4B0083C7BF /* Products */ = { 71 | isa = PBXGroup; 72 | children = ( 73 | 2055F6DB22824D4B0083C7BF /* libThinAppLib.a */, 74 | ); 75 | name = Products; 76 | sourceTree = ""; 77 | }; 78 | 2055F6DD22824D4B0083C7BF /* ThinAppLib */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | 2085EB18228528C400E2C4D1 /* UIView+Test.h */, 82 | 2085EB19228528C400E2C4D1 /* UIView+Test.m */, 83 | 2055F70422825E670083C7BF /* CA.h */, 84 | 2055F70822825E670083C7BF /* CA.m */, 85 | 2055F70522825E670083C7BF /* CB.h */, 86 | 2055F70222825E670083C7BF /* CB.m */, 87 | 2055F70022825E670083C7BF /* CC.h */, 88 | 2055F70122825E670083C7BF /* CC.m */, 89 | 2055F70722825E670083C7BF /* CD.h */, 90 | 2055F6FF22825E670083C7BF /* CD.m */, 91 | 2055F70622825E670083C7BF /* CE.h */, 92 | 2055F70322825E670083C7BF /* CE.m */, 93 | 2055F6DE22824D4B0083C7BF /* ThinAppLib.h */, 94 | 2055F6DF22824D4B0083C7BF /* ThinAppLib.m */, 95 | ); 96 | path = ThinAppLib; 97 | sourceTree = ""; 98 | }; 99 | /* End PBXGroup section */ 100 | 101 | /* Begin PBXNativeTarget section */ 102 | 2055F6DA22824D4B0083C7BF /* ThinAppLib */ = { 103 | isa = PBXNativeTarget; 104 | buildConfigurationList = 2055F6E422824D4B0083C7BF /* Build configuration list for PBXNativeTarget "ThinAppLib" */; 105 | buildPhases = ( 106 | 2055F6D722824D4B0083C7BF /* Sources */, 107 | 2055F6D822824D4B0083C7BF /* Frameworks */, 108 | 2055F6D922824D4B0083C7BF /* CopyFiles */, 109 | ); 110 | buildRules = ( 111 | ); 112 | dependencies = ( 113 | ); 114 | name = ThinAppLib; 115 | productName = ThinAppLib; 116 | productReference = 2055F6DB22824D4B0083C7BF /* libThinAppLib.a */; 117 | productType = "com.apple.product-type.library.static"; 118 | }; 119 | /* End PBXNativeTarget section */ 120 | 121 | /* Begin PBXProject section */ 122 | 2055F6D322824D4B0083C7BF /* Project object */ = { 123 | isa = PBXProject; 124 | attributes = { 125 | LastUpgradeCheck = 1020; 126 | ORGANIZATIONNAME = Youngsoft; 127 | TargetAttributes = { 128 | 2055F6DA22824D4B0083C7BF = { 129 | CreatedOnToolsVersion = 10.2.1; 130 | }; 131 | }; 132 | }; 133 | buildConfigurationList = 2055F6D622824D4B0083C7BF /* Build configuration list for PBXProject "ThinAppLib" */; 134 | compatibilityVersion = "Xcode 9.3"; 135 | developmentRegion = en; 136 | hasScannedForEncodings = 0; 137 | knownRegions = ( 138 | en, 139 | ); 140 | mainGroup = 2055F6D222824D4B0083C7BF; 141 | productRefGroup = 2055F6DC22824D4B0083C7BF /* Products */; 142 | projectDirPath = ""; 143 | projectRoot = ""; 144 | targets = ( 145 | 2055F6DA22824D4B0083C7BF /* ThinAppLib */, 146 | ); 147 | }; 148 | /* End PBXProject section */ 149 | 150 | /* Begin PBXSourcesBuildPhase section */ 151 | 2055F6D722824D4B0083C7BF /* Sources */ = { 152 | isa = PBXSourcesBuildPhase; 153 | buildActionMask = 2147483647; 154 | files = ( 155 | 2085EB1A228528C400E2C4D1 /* UIView+Test.m in Sources */, 156 | 2055F70B22825E670083C7BF /* CB.m in Sources */, 157 | 2055F70C22825E670083C7BF /* CE.m in Sources */, 158 | 2055F70A22825E670083C7BF /* CC.m in Sources */, 159 | 2055F70922825E670083C7BF /* CD.m in Sources */, 160 | 2055F6E022824D4B0083C7BF /* ThinAppLib.m in Sources */, 161 | 2055F70D22825E670083C7BF /* CA.m in Sources */, 162 | ); 163 | runOnlyForDeploymentPostprocessing = 0; 164 | }; 165 | /* End PBXSourcesBuildPhase section */ 166 | 167 | /* Begin XCBuildConfiguration section */ 168 | 2055F6E222824D4B0083C7BF /* Debug */ = { 169 | isa = XCBuildConfiguration; 170 | buildSettings = { 171 | ALWAYS_SEARCH_USER_PATHS = NO; 172 | CLANG_ANALYZER_NONNULL = YES; 173 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 174 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 175 | CLANG_CXX_LIBRARY = "libc++"; 176 | CLANG_ENABLE_MODULES = YES; 177 | CLANG_ENABLE_OBJC_ARC = YES; 178 | CLANG_ENABLE_OBJC_WEAK = YES; 179 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 180 | CLANG_WARN_BOOL_CONVERSION = YES; 181 | CLANG_WARN_COMMA = YES; 182 | CLANG_WARN_CONSTANT_CONVERSION = YES; 183 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 184 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 185 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 186 | CLANG_WARN_EMPTY_BODY = YES; 187 | CLANG_WARN_ENUM_CONVERSION = YES; 188 | CLANG_WARN_INFINITE_RECURSION = YES; 189 | CLANG_WARN_INT_CONVERSION = YES; 190 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 191 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 192 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 193 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 194 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 195 | CLANG_WARN_STRICT_PROTOTYPES = YES; 196 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 197 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 198 | CLANG_WARN_UNREACHABLE_CODE = YES; 199 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 200 | CODE_SIGN_IDENTITY = "iPhone Developer"; 201 | COPY_PHASE_STRIP = NO; 202 | DEBUG_INFORMATION_FORMAT = dwarf; 203 | ENABLE_STRICT_OBJC_MSGSEND = YES; 204 | ENABLE_TESTABILITY = YES; 205 | GCC_C_LANGUAGE_STANDARD = gnu11; 206 | GCC_DYNAMIC_NO_PIC = NO; 207 | GCC_NO_COMMON_BLOCKS = YES; 208 | GCC_OPTIMIZATION_LEVEL = 0; 209 | GCC_PREPROCESSOR_DEFINITIONS = ( 210 | "DEBUG=1", 211 | "$(inherited)", 212 | ); 213 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 214 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 215 | GCC_WARN_UNDECLARED_SELECTOR = YES; 216 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 217 | GCC_WARN_UNUSED_FUNCTION = YES; 218 | GCC_WARN_UNUSED_VARIABLE = YES; 219 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 220 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 221 | MTL_FAST_MATH = YES; 222 | ONLY_ACTIVE_ARCH = YES; 223 | SDKROOT = iphoneos; 224 | }; 225 | name = Debug; 226 | }; 227 | 2055F6E322824D4B0083C7BF /* Release */ = { 228 | isa = XCBuildConfiguration; 229 | buildSettings = { 230 | ALWAYS_SEARCH_USER_PATHS = NO; 231 | CLANG_ANALYZER_NONNULL = YES; 232 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 233 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 234 | CLANG_CXX_LIBRARY = "libc++"; 235 | CLANG_ENABLE_MODULES = YES; 236 | CLANG_ENABLE_OBJC_ARC = YES; 237 | CLANG_ENABLE_OBJC_WEAK = YES; 238 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 239 | CLANG_WARN_BOOL_CONVERSION = YES; 240 | CLANG_WARN_COMMA = YES; 241 | CLANG_WARN_CONSTANT_CONVERSION = YES; 242 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 243 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 244 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 245 | CLANG_WARN_EMPTY_BODY = YES; 246 | CLANG_WARN_ENUM_CONVERSION = YES; 247 | CLANG_WARN_INFINITE_RECURSION = YES; 248 | CLANG_WARN_INT_CONVERSION = YES; 249 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 250 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 251 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 252 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 253 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 254 | CLANG_WARN_STRICT_PROTOTYPES = YES; 255 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 256 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 257 | CLANG_WARN_UNREACHABLE_CODE = YES; 258 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 259 | CODE_SIGN_IDENTITY = "iPhone Developer"; 260 | COPY_PHASE_STRIP = NO; 261 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 262 | ENABLE_NS_ASSERTIONS = NO; 263 | ENABLE_STRICT_OBJC_MSGSEND = YES; 264 | GCC_C_LANGUAGE_STANDARD = gnu11; 265 | GCC_NO_COMMON_BLOCKS = YES; 266 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 267 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 268 | GCC_WARN_UNDECLARED_SELECTOR = YES; 269 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 270 | GCC_WARN_UNUSED_FUNCTION = YES; 271 | GCC_WARN_UNUSED_VARIABLE = YES; 272 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 273 | MTL_ENABLE_DEBUG_INFO = NO; 274 | MTL_FAST_MATH = YES; 275 | SDKROOT = iphoneos; 276 | VALIDATE_PRODUCT = YES; 277 | }; 278 | name = Release; 279 | }; 280 | 2055F6E522824D4B0083C7BF /* Debug */ = { 281 | isa = XCBuildConfiguration; 282 | buildSettings = { 283 | CODE_SIGN_STYLE = Automatic; 284 | DEVELOPMENT_TEAM = BGQ8WB468K; 285 | OTHER_LDFLAGS = "-ObjC"; 286 | PRODUCT_NAME = "$(TARGET_NAME)"; 287 | SKIP_INSTALL = YES; 288 | TARGETED_DEVICE_FAMILY = "1,2"; 289 | }; 290 | name = Debug; 291 | }; 292 | 2055F6E622824D4B0083C7BF /* Release */ = { 293 | isa = XCBuildConfiguration; 294 | buildSettings = { 295 | CODE_SIGN_STYLE = Automatic; 296 | DEVELOPMENT_TEAM = BGQ8WB468K; 297 | OTHER_LDFLAGS = "-ObjC"; 298 | PRODUCT_NAME = "$(TARGET_NAME)"; 299 | SKIP_INSTALL = YES; 300 | TARGETED_DEVICE_FAMILY = "1,2"; 301 | }; 302 | name = Release; 303 | }; 304 | /* End XCBuildConfiguration section */ 305 | 306 | /* Begin XCConfigurationList section */ 307 | 2055F6D622824D4B0083C7BF /* Build configuration list for PBXProject "ThinAppLib" */ = { 308 | isa = XCConfigurationList; 309 | buildConfigurations = ( 310 | 2055F6E222824D4B0083C7BF /* Debug */, 311 | 2055F6E322824D4B0083C7BF /* Release */, 312 | ); 313 | defaultConfigurationIsVisible = 0; 314 | defaultConfigurationName = Release; 315 | }; 316 | 2055F6E422824D4B0083C7BF /* Build configuration list for PBXNativeTarget "ThinAppLib" */ = { 317 | isa = XCConfigurationList; 318 | buildConfigurations = ( 319 | 2055F6E522824D4B0083C7BF /* Debug */, 320 | 2055F6E622824D4B0083C7BF /* Release */, 321 | ); 322 | defaultConfigurationIsVisible = 0; 323 | defaultConfigurationName = Release; 324 | }; 325 | /* End XCConfigurationList section */ 326 | }; 327 | rootObject = 2055F6D322824D4B0083C7BF /* Project object */; 328 | } 329 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/ThinAppLib/ThinAppLib.xcodeproj/xcshareddata/xcschemes/ThinAppLib.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 70 | 71 | 72 | 73 | 75 | 76 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/ThinAppLib/ThinAppLib/CA.h: -------------------------------------------------------------------------------- 1 | // 2 | // CA.h 3 | // FatApp 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | //这个类会被链接 14 | @interface CA : NSObject 15 | 16 | -(void)fnCA; 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/ThinAppLib/ThinAppLib/CA.m: -------------------------------------------------------------------------------- 1 | // 2 | // CA.m 3 | // FatApp 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import "CA.h" 10 | 11 | @implementation CA 12 | 13 | -(void)fnCA 14 | { 15 | NSLog(@"This is fnCA"); 16 | } 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/ThinAppLib/ThinAppLib/CB.h: -------------------------------------------------------------------------------- 1 | // 2 | // CB.h 3 | // FatApp 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | //这个类不会被链接 14 | @interface CB : NSObject 15 | 16 | -(void)fnCB; 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/ThinAppLib/ThinAppLib/CB.m: -------------------------------------------------------------------------------- 1 | // 2 | // CB.m 3 | // FatApp 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import "CB.h" 10 | 11 | @implementation CB 12 | 13 | -(void)fnCB 14 | { 15 | NSLog(@"This is fnCB"); 16 | } 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/ThinAppLib/ThinAppLib/CC.h: -------------------------------------------------------------------------------- 1 | // 2 | // CC.h 3 | // FatAppLib 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | //这个类会被链接 14 | @interface CC : NSObject 15 | 16 | -(void)fnCC; 17 | 18 | @end 19 | 20 | 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/ThinAppLib/ThinAppLib/CC.m: -------------------------------------------------------------------------------- 1 | // 2 | // CC.m 3 | // FatAppLib 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import "CC.h" 10 | 11 | @implementation CC 12 | 13 | -(void)fnCC 14 | { 15 | NSLog(@"This is fnCC"); 16 | } 17 | 18 | @end 19 | 20 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/ThinAppLib/ThinAppLib/CD.h: -------------------------------------------------------------------------------- 1 | // 2 | // CD.h 3 | // FatAppLib 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | //这个类不会被链接 14 | @interface CD : NSObject 15 | 16 | -(void)fnCD; 17 | 18 | @end 19 | 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/ThinAppLib/ThinAppLib/CD.m: -------------------------------------------------------------------------------- 1 | // 2 | // CD.m 3 | // FatAppLib 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import "CD.h" 10 | 11 | 12 | @implementation CD 13 | 14 | -(void)fnCD 15 | { 16 | NSLog(@"This is fnCD"); 17 | } 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/ThinAppLib/ThinAppLib/CE.h: -------------------------------------------------------------------------------- 1 | // 2 | // CE.h 3 | // FatAppLib 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | //这个类不会被链接 14 | @interface CE : NSObject 15 | 16 | -(void)fnCE; 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/ThinAppLib/ThinAppLib/CE.m: -------------------------------------------------------------------------------- 1 | // 2 | // CE.m 3 | // FatAppLib 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import "CE.h" 10 | 11 | @implementation CE 12 | 13 | -(void)fnCE 14 | { 15 | NSLog(@"This is fnCE"); 16 | } 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/ThinAppLib/ThinAppLib/ThinAppLib.h: -------------------------------------------------------------------------------- 1 | // 2 | // ThinAppLib.h 3 | // ThinAppLib 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "CA.h" 11 | #import "CB.h" 12 | #import "CC.h" 13 | #import "CD.h" 14 | #import "CE.h" 15 | #import "UIView+Test.h" 16 | 17 | //库中的C函数,会被调用 18 | void libFoo1(); 19 | 20 | //库中的C函数,不会被调用 21 | void libFoo2(); 22 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/ThinAppLib/ThinAppLib/ThinAppLib.m: -------------------------------------------------------------------------------- 1 | // 2 | // ThinAppLib.m 3 | // ThinAppLib 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import "ThinAppLib.h" 10 | 11 | void libFoo1() 12 | { 13 | NSLog(@"This is libFoo1"); 14 | } 15 | 16 | void libFoo2() 17 | { 18 | NSLog(@"This is libFoo2"); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/ThinAppLib/ThinAppLib/UIView+Test.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+Test.h 3 | // FatAppLib 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | //类的分类方法最好在主程序工程中实现。这样就不需要在链接静态库时指定-ObjC选项。 14 | @interface UIView (Test) 15 | 16 | -(void)test_UIView; 17 | 18 | @end 19 | 20 | /* 21 | 通过在分类的头文件中定义一个内联函数,内联函数调用分类实现文件中的一个dumy函数,这样只要这个分类的头文件被include或者import就会把 22 | 整个分类的实现链接到可执行程序中去。一般情况下我们在静态库中建立分类那就表明一定会被某个文件引用这个分类,从而实现整个文件的链接处理。 23 | 而在分类中定义的这两个函数则因为没有被任何地方调用,因此会在链接优化中将这两个函数给优化掉。这样就使得即使我们不用-ObjC选项也能 24 | 将静态库中的分类链接到可执行程序中去。最后需要注意的是在每个分类中定义的这两个函数名最好能够唯一这样就不会出现符号重名冲突的问题了。 25 | */ 26 | extern void _cat_UIView_Test_Impl(void); 27 | OS_ALWAYS_INLINE void _cat_UIView_Test_Decl(void){_cat_UIView_Test_Impl();} 28 | 29 | NS_ASSUME_NONNULL_END 30 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/ThinAppLib/ThinAppLib/UIView+Test.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+Test.m 3 | // FatAppLib 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import "UIView+Test.h" 10 | 11 | @implementation UIView (Test) 12 | 13 | -(void)test_UIView 14 | { 15 | NSLog(@"This is test_UIView"); 16 | } 17 | 18 | @end 19 | 20 | 21 | void _cat_UIView_Test_Impl(void){} 22 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // ThinApp 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // ThinApp 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import "../ThinApp/ThinAppLib/ThinAppLib/ThinAppLib.h" 11 | 12 | 13 | @interface ViewController () 14 | 15 | @end 16 | 17 | @implementation ViewController 18 | 19 | - (void)viewDidLoad { 20 | [super viewDidLoad]; 21 | // Do any additional setup after loading the view. 22 | 23 | //最后的可执行程序只会链接CA,CC两个类,以及只会链接libFoo1函数。 24 | 25 | 26 | //实例化CA对象。 27 | CA *pA = [CA new]; 28 | [pA fnCA]; 29 | 30 | //实例化CC对象 31 | CC *pC = [CC new]; 32 | [pC fnCC]; 33 | 34 | //函数调用 35 | libFoo1(); 36 | 37 | //分类调用 38 | [self.view test_UIView]; 39 | } 40 | 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /ThinApp/ThinApp/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // ThinApp 4 | // 5 | // Created by oubaiquan on 2019/5/8. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /YSAppSizeTest.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /YSAppSizeTest.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | --------------------------------------------------------------------------------