├── .gitignore ├── AppleCellularFix.xcodeproj ├── project.pbxproj └── project.xcworkspace │ └── contents.xcworkspacedata ├── AppleCellularFix ├── AppDelegate.h ├── AppDelegate.m ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── Info.plist ├── SGNetworkConfigurationModifier.h ├── SGNetworkConfigurationModifier.m ├── ViewController.h ├── ViewController.m ├── evil_sign.py └── main.m ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## User settings 6 | xcuserdata/ 7 | 8 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) 9 | *.xcscmblueprint 10 | *.xccheckout 11 | 12 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) 13 | build/ 14 | DerivedData/ 15 | *.moved-aside 16 | *.pbxuser 17 | !default.pbxuser 18 | *.mode1v3 19 | !default.mode1v3 20 | *.mode2v3 21 | !default.mode2v3 22 | *.perspectivev3 23 | !default.perspectivev3 24 | 25 | ## Obj-C/Swift specific 26 | *.hmap 27 | 28 | ## App packaging 29 | *.ipa 30 | *.dSYM.zip 31 | *.dSYM 32 | 33 | # CocoaPods 34 | # 35 | # We recommend against adding the Pods directory to your .gitignore. However 36 | # you should judge for yourself, the pros and cons are mentioned at: 37 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 38 | # 39 | Pods/ 40 | # 41 | # Add this line if you want to avoid checking in source code from the Xcode workspace 42 | # *.xcworkspace 43 | 44 | # Carthage 45 | # 46 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 47 | # Carthage/Checkouts 48 | 49 | Carthage/Build/ 50 | 51 | # fastlane 52 | # 53 | # It is recommended to not store the screenshots in the git repo. 54 | # Instead, use fastlane to re-generate the screenshots whenever they are needed. 55 | # For more information about the recommended setup visit: 56 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 57 | 58 | fastlane/report.xml 59 | fastlane/Preview.html 60 | fastlane/screenshots/**/*.png 61 | fastlane/test_output 62 | 63 | # Code Injection 64 | # 65 | # After new code Injection tools there's a generated folder /iOSInjectionProject 66 | # https://github.com/johnno1962/injectionforxcode 67 | 68 | iOSInjectionProject/ 69 | -------------------------------------------------------------------------------- /AppleCellularFix.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 68E23A7F247D18E5008571EF /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 68E23A7E247D18E5008571EF /* AppDelegate.m */; }; 11 | 68E23A85247D18E5008571EF /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 68E23A84247D18E5008571EF /* ViewController.m */; }; 12 | 68E23A88247D18E5008571EF /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 68E23A86247D18E5008571EF /* Main.storyboard */; }; 13 | 68E23A8A247D18E6008571EF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 68E23A89247D18E6008571EF /* Assets.xcassets */; }; 14 | 68E23A8D247D18E6008571EF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 68E23A8B247D18E6008571EF /* LaunchScreen.storyboard */; }; 15 | 68E23A90247D18E6008571EF /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 68E23A8F247D18E6008571EF /* main.m */; }; 16 | 68E23A98247D18FE008571EF /* evil_sign.py in Resources */ = {isa = PBXBuildFile; fileRef = 68E23A97247D18FE008571EF /* evil_sign.py */; }; 17 | 68E23A9B247D1976008571EF /* SGNetworkConfigurationModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 68E23A9A247D1976008571EF /* SGNetworkConfigurationModifier.m */; }; 18 | /* End PBXBuildFile section */ 19 | 20 | /* Begin PBXFileReference section */ 21 | 68E23A7A247D18E5008571EF /* AppleCellularFix.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AppleCellularFix.app; sourceTree = BUILT_PRODUCTS_DIR; }; 22 | 68E23A7D247D18E5008571EF /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 23 | 68E23A7E247D18E5008571EF /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 24 | 68E23A83247D18E5008571EF /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 25 | 68E23A84247D18E5008571EF /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 26 | 68E23A87247D18E5008571EF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 27 | 68E23A89247D18E6008571EF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 28 | 68E23A8C247D18E6008571EF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 29 | 68E23A8E247D18E6008571EF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 30 | 68E23A8F247D18E6008571EF /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 31 | 68E23A97247D18FE008571EF /* evil_sign.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; path = evil_sign.py; sourceTree = ""; }; 32 | 68E23A99247D1976008571EF /* SGNetworkConfigurationModifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SGNetworkConfigurationModifier.h; sourceTree = ""; }; 33 | 68E23A9A247D1976008571EF /* SGNetworkConfigurationModifier.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SGNetworkConfigurationModifier.m; sourceTree = ""; }; 34 | /* End PBXFileReference section */ 35 | 36 | /* Begin PBXFrameworksBuildPhase section */ 37 | 68E23A77247D18E5008571EF /* Frameworks */ = { 38 | isa = PBXFrameworksBuildPhase; 39 | buildActionMask = 2147483647; 40 | files = ( 41 | ); 42 | runOnlyForDeploymentPostprocessing = 0; 43 | }; 44 | /* End PBXFrameworksBuildPhase section */ 45 | 46 | /* Begin PBXGroup section */ 47 | 68E23A71247D18E5008571EF = { 48 | isa = PBXGroup; 49 | children = ( 50 | 68E23A7C247D18E5008571EF /* AppleCellularFix */, 51 | 68E23A7B247D18E5008571EF /* Products */, 52 | ); 53 | sourceTree = ""; 54 | }; 55 | 68E23A7B247D18E5008571EF /* Products */ = { 56 | isa = PBXGroup; 57 | children = ( 58 | 68E23A7A247D18E5008571EF /* AppleCellularFix.app */, 59 | ); 60 | name = Products; 61 | sourceTree = ""; 62 | }; 63 | 68E23A7C247D18E5008571EF /* AppleCellularFix */ = { 64 | isa = PBXGroup; 65 | children = ( 66 | 68E23A99247D1976008571EF /* SGNetworkConfigurationModifier.h */, 67 | 68E23A9A247D1976008571EF /* SGNetworkConfigurationModifier.m */, 68 | 68E23A7D247D18E5008571EF /* AppDelegate.h */, 69 | 68E23A7E247D18E5008571EF /* AppDelegate.m */, 70 | 68E23A83247D18E5008571EF /* ViewController.h */, 71 | 68E23A84247D18E5008571EF /* ViewController.m */, 72 | 68E23A86247D18E5008571EF /* Main.storyboard */, 73 | 68E23A89247D18E6008571EF /* Assets.xcassets */, 74 | 68E23A8B247D18E6008571EF /* LaunchScreen.storyboard */, 75 | 68E23A8E247D18E6008571EF /* Info.plist */, 76 | 68E23A8F247D18E6008571EF /* main.m */, 77 | 68E23A97247D18FE008571EF /* evil_sign.py */, 78 | ); 79 | path = AppleCellularFix; 80 | sourceTree = ""; 81 | }; 82 | /* End PBXGroup section */ 83 | 84 | /* Begin PBXNativeTarget section */ 85 | 68E23A79247D18E5008571EF /* AppleCellularFix */ = { 86 | isa = PBXNativeTarget; 87 | buildConfigurationList = 68E23A93247D18E6008571EF /* Build configuration list for PBXNativeTarget "AppleCellularFix" */; 88 | buildPhases = ( 89 | 68E23A76247D18E5008571EF /* Sources */, 90 | 68E23A77247D18E5008571EF /* Frameworks */, 91 | 68E23A78247D18E5008571EF /* Resources */, 92 | 68E23A9C247D1B1C008571EF /* ShellScript */, 93 | ); 94 | buildRules = ( 95 | ); 96 | dependencies = ( 97 | ); 98 | name = AppleCellularFix; 99 | productName = AppleCellularFix; 100 | productReference = 68E23A7A247D18E5008571EF /* AppleCellularFix.app */; 101 | productType = "com.apple.product-type.application"; 102 | }; 103 | /* End PBXNativeTarget section */ 104 | 105 | /* Begin PBXProject section */ 106 | 68E23A72247D18E5008571EF /* Project object */ = { 107 | isa = PBXProject; 108 | attributes = { 109 | LastUpgradeCheck = 1130; 110 | ORGANIZATIONNAME = soulghost; 111 | TargetAttributes = { 112 | 68E23A79247D18E5008571EF = { 113 | CreatedOnToolsVersion = 11.3.1; 114 | }; 115 | }; 116 | }; 117 | buildConfigurationList = 68E23A75247D18E5008571EF /* Build configuration list for PBXProject "AppleCellularFix" */; 118 | compatibilityVersion = "Xcode 9.3"; 119 | developmentRegion = en; 120 | hasScannedForEncodings = 0; 121 | knownRegions = ( 122 | en, 123 | Base, 124 | ); 125 | mainGroup = 68E23A71247D18E5008571EF; 126 | productRefGroup = 68E23A7B247D18E5008571EF /* Products */; 127 | projectDirPath = ""; 128 | projectRoot = ""; 129 | targets = ( 130 | 68E23A79247D18E5008571EF /* AppleCellularFix */, 131 | ); 132 | }; 133 | /* End PBXProject section */ 134 | 135 | /* Begin PBXResourcesBuildPhase section */ 136 | 68E23A78247D18E5008571EF /* Resources */ = { 137 | isa = PBXResourcesBuildPhase; 138 | buildActionMask = 2147483647; 139 | files = ( 140 | 68E23A8D247D18E6008571EF /* LaunchScreen.storyboard in Resources */, 141 | 68E23A8A247D18E6008571EF /* Assets.xcassets in Resources */, 142 | 68E23A88247D18E5008571EF /* Main.storyboard in Resources */, 143 | 68E23A98247D18FE008571EF /* evil_sign.py in Resources */, 144 | ); 145 | runOnlyForDeploymentPostprocessing = 0; 146 | }; 147 | /* End PBXResourcesBuildPhase section */ 148 | 149 | /* Begin PBXShellScriptBuildPhase section */ 150 | 68E23A9C247D1B1C008571EF /* ShellScript */ = { 151 | isa = PBXShellScriptBuildPhase; 152 | buildActionMask = 2147483647; 153 | files = ( 154 | ); 155 | inputFileListPaths = ( 156 | ); 157 | inputPaths = ( 158 | ); 159 | outputFileListPaths = ( 160 | ); 161 | outputPaths = ( 162 | ); 163 | runOnlyForDeploymentPostprocessing = 0; 164 | shellPath = /bin/sh; 165 | shellScript = "python ${SRCROOT}/AppleCellularFix/evil_sign.py\n"; 166 | }; 167 | /* End PBXShellScriptBuildPhase section */ 168 | 169 | /* Begin PBXSourcesBuildPhase section */ 170 | 68E23A76247D18E5008571EF /* Sources */ = { 171 | isa = PBXSourcesBuildPhase; 172 | buildActionMask = 2147483647; 173 | files = ( 174 | 68E23A9B247D1976008571EF /* SGNetworkConfigurationModifier.m in Sources */, 175 | 68E23A85247D18E5008571EF /* ViewController.m in Sources */, 176 | 68E23A7F247D18E5008571EF /* AppDelegate.m in Sources */, 177 | 68E23A90247D18E6008571EF /* main.m in Sources */, 178 | ); 179 | runOnlyForDeploymentPostprocessing = 0; 180 | }; 181 | /* End PBXSourcesBuildPhase section */ 182 | 183 | /* Begin PBXVariantGroup section */ 184 | 68E23A86247D18E5008571EF /* Main.storyboard */ = { 185 | isa = PBXVariantGroup; 186 | children = ( 187 | 68E23A87247D18E5008571EF /* Base */, 188 | ); 189 | name = Main.storyboard; 190 | sourceTree = ""; 191 | }; 192 | 68E23A8B247D18E6008571EF /* LaunchScreen.storyboard */ = { 193 | isa = PBXVariantGroup; 194 | children = ( 195 | 68E23A8C247D18E6008571EF /* Base */, 196 | ); 197 | name = LaunchScreen.storyboard; 198 | sourceTree = ""; 199 | }; 200 | /* End PBXVariantGroup section */ 201 | 202 | /* Begin XCBuildConfiguration section */ 203 | 68E23A91247D18E6008571EF /* Debug */ = { 204 | isa = XCBuildConfiguration; 205 | buildSettings = { 206 | ALWAYS_SEARCH_USER_PATHS = NO; 207 | CLANG_ANALYZER_NONNULL = YES; 208 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 209 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 210 | CLANG_CXX_LIBRARY = "libc++"; 211 | CLANG_ENABLE_MODULES = YES; 212 | CLANG_ENABLE_OBJC_ARC = YES; 213 | CLANG_ENABLE_OBJC_WEAK = YES; 214 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 215 | CLANG_WARN_BOOL_CONVERSION = YES; 216 | CLANG_WARN_COMMA = YES; 217 | CLANG_WARN_CONSTANT_CONVERSION = YES; 218 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 219 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 220 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 221 | CLANG_WARN_EMPTY_BODY = YES; 222 | CLANG_WARN_ENUM_CONVERSION = YES; 223 | CLANG_WARN_INFINITE_RECURSION = YES; 224 | CLANG_WARN_INT_CONVERSION = YES; 225 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 226 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 227 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 228 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 229 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 230 | CLANG_WARN_STRICT_PROTOTYPES = YES; 231 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 232 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 233 | CLANG_WARN_UNREACHABLE_CODE = YES; 234 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 235 | COPY_PHASE_STRIP = NO; 236 | DEBUG_INFORMATION_FORMAT = dwarf; 237 | ENABLE_STRICT_OBJC_MSGSEND = YES; 238 | ENABLE_TESTABILITY = YES; 239 | GCC_C_LANGUAGE_STANDARD = gnu11; 240 | GCC_DYNAMIC_NO_PIC = NO; 241 | GCC_NO_COMMON_BLOCKS = YES; 242 | GCC_OPTIMIZATION_LEVEL = 0; 243 | GCC_PREPROCESSOR_DEFINITIONS = ( 244 | "DEBUG=1", 245 | "$(inherited)", 246 | ); 247 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 248 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 249 | GCC_WARN_UNDECLARED_SELECTOR = YES; 250 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 251 | GCC_WARN_UNUSED_FUNCTION = YES; 252 | GCC_WARN_UNUSED_VARIABLE = YES; 253 | IPHONEOS_DEPLOYMENT_TARGET = 13.2; 254 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 255 | MTL_FAST_MATH = YES; 256 | ONLY_ACTIVE_ARCH = YES; 257 | SDKROOT = iphoneos; 258 | }; 259 | name = Debug; 260 | }; 261 | 68E23A92247D18E6008571EF /* Release */ = { 262 | isa = XCBuildConfiguration; 263 | buildSettings = { 264 | ALWAYS_SEARCH_USER_PATHS = NO; 265 | CLANG_ANALYZER_NONNULL = YES; 266 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 267 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 268 | CLANG_CXX_LIBRARY = "libc++"; 269 | CLANG_ENABLE_MODULES = YES; 270 | CLANG_ENABLE_OBJC_ARC = YES; 271 | CLANG_ENABLE_OBJC_WEAK = YES; 272 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 273 | CLANG_WARN_BOOL_CONVERSION = YES; 274 | CLANG_WARN_COMMA = YES; 275 | CLANG_WARN_CONSTANT_CONVERSION = YES; 276 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 277 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 278 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 279 | CLANG_WARN_EMPTY_BODY = YES; 280 | CLANG_WARN_ENUM_CONVERSION = YES; 281 | CLANG_WARN_INFINITE_RECURSION = YES; 282 | CLANG_WARN_INT_CONVERSION = YES; 283 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 284 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 285 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 286 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 287 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 288 | CLANG_WARN_STRICT_PROTOTYPES = YES; 289 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 290 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 291 | CLANG_WARN_UNREACHABLE_CODE = YES; 292 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 293 | COPY_PHASE_STRIP = NO; 294 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 295 | ENABLE_NS_ASSERTIONS = NO; 296 | ENABLE_STRICT_OBJC_MSGSEND = YES; 297 | GCC_C_LANGUAGE_STANDARD = gnu11; 298 | GCC_NO_COMMON_BLOCKS = YES; 299 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 300 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 301 | GCC_WARN_UNDECLARED_SELECTOR = YES; 302 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 303 | GCC_WARN_UNUSED_FUNCTION = YES; 304 | GCC_WARN_UNUSED_VARIABLE = YES; 305 | IPHONEOS_DEPLOYMENT_TARGET = 13.2; 306 | MTL_ENABLE_DEBUG_INFO = NO; 307 | MTL_FAST_MATH = YES; 308 | SDKROOT = iphoneos; 309 | VALIDATE_PRODUCT = YES; 310 | }; 311 | name = Release; 312 | }; 313 | 68E23A94247D18E6008571EF /* Debug */ = { 314 | isa = XCBuildConfiguration; 315 | buildSettings = { 316 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 317 | CODE_SIGN_STYLE = Automatic; 318 | DEVELOPMENT_TEAM = 6CMYQQFFT8; 319 | INFOPLIST_FILE = AppleCellularFix/Info.plist; 320 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 321 | LD_RUNPATH_SEARCH_PATHS = ( 322 | "$(inherited)", 323 | "@executable_path/Frameworks", 324 | ); 325 | PRODUCT_BUNDLE_IDENTIFIER = com.soulghost.AppleCellularFix; 326 | PRODUCT_NAME = "$(TARGET_NAME)"; 327 | TARGETED_DEVICE_FAMILY = "1,2"; 328 | }; 329 | name = Debug; 330 | }; 331 | 68E23A95247D18E6008571EF /* Release */ = { 332 | isa = XCBuildConfiguration; 333 | buildSettings = { 334 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 335 | CODE_SIGN_STYLE = Automatic; 336 | DEVELOPMENT_TEAM = 6CMYQQFFT8; 337 | INFOPLIST_FILE = AppleCellularFix/Info.plist; 338 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 339 | LD_RUNPATH_SEARCH_PATHS = ( 340 | "$(inherited)", 341 | "@executable_path/Frameworks", 342 | ); 343 | PRODUCT_BUNDLE_IDENTIFIER = com.soulghost.AppleCellularFix; 344 | PRODUCT_NAME = "$(TARGET_NAME)"; 345 | TARGETED_DEVICE_FAMILY = "1,2"; 346 | }; 347 | name = Release; 348 | }; 349 | /* End XCBuildConfiguration section */ 350 | 351 | /* Begin XCConfigurationList section */ 352 | 68E23A75247D18E5008571EF /* Build configuration list for PBXProject "AppleCellularFix" */ = { 353 | isa = XCConfigurationList; 354 | buildConfigurations = ( 355 | 68E23A91247D18E6008571EF /* Debug */, 356 | 68E23A92247D18E6008571EF /* Release */, 357 | ); 358 | defaultConfigurationIsVisible = 0; 359 | defaultConfigurationName = Release; 360 | }; 361 | 68E23A93247D18E6008571EF /* Build configuration list for PBXNativeTarget "AppleCellularFix" */ = { 362 | isa = XCConfigurationList; 363 | buildConfigurations = ( 364 | 68E23A94247D18E6008571EF /* Debug */, 365 | 68E23A95247D18E6008571EF /* Release */, 366 | ); 367 | defaultConfigurationIsVisible = 0; 368 | defaultConfigurationName = Release; 369 | }; 370 | /* End XCConfigurationList section */ 371 | }; 372 | rootObject = 68E23A72247D18E5008571EF /* Project object */; 373 | } 374 | -------------------------------------------------------------------------------- /AppleCellularFix.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /AppleCellularFix/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // AppleCellularFix 4 | // 5 | // Created by soulghost on 2020/5/26. 6 | // Copyright © 2020 soulghost. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow * window; 14 | 15 | @end 16 | 17 | -------------------------------------------------------------------------------- /AppleCellularFix/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // AppleCellularFix 4 | // 5 | // Created by soulghost on 2020/5/26. 6 | // Copyright © 2020 soulghost. 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 | @end 24 | -------------------------------------------------------------------------------- /AppleCellularFix/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 | } -------------------------------------------------------------------------------- /AppleCellularFix/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /AppleCellularFix/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 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /AppleCellularFix/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 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /AppleCellularFix/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 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 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 | -------------------------------------------------------------------------------- /AppleCellularFix/SGNetworkConfigurationModifier.h: -------------------------------------------------------------------------------- 1 | // 2 | // SGNetworkConfigurationModifier.h 3 | // RootUtilHelper 4 | // 5 | // Created by soulghost on 2020/5/26. 6 | // Copyright © 2020 soulghost. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface SGNetworkConfigurationModifier : NSObject 14 | 15 | + (void)resolveNetworkProblmeForAppWithBundleId:(NSString *)bundleId; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /AppleCellularFix/SGNetworkConfigurationModifier.m: -------------------------------------------------------------------------------- 1 | // 2 | // SGNetworkConfigurationModifier.m 3 | // RootUtilHelper 4 | // 5 | // Created by soulghost on 2020/5/26. 6 | // Copyright © 2020 soulghost. All rights reserved. 7 | // 8 | 9 | #import "SGNetworkConfigurationModifier.h" 10 | #include 11 | 12 | #define c(clazz) ((id)(NSClassFromString(@#clazz))) 13 | 14 | @implementation SGNetworkConfigurationModifier 15 | 16 | + (void)resolveNetworkProblmeForAppWithBundleId:(NSString *)bundleId { 17 | NSBundle *cellularBundle = [NSBundle bundleWithPath:@"/System/Library/PrivateFrameworks/SettingsCellular.framework"]; 18 | if (![cellularBundle load]) { 19 | cellularBundle = [NSBundle bundleWithPath:@"/System/Library/PrivateFrameworks/Preferences.framework"]; 20 | if ([cellularBundle load]) { 21 | printf("[+] Preferences.framework is loaded\n"); 22 | } else { 23 | printf("[-] error: cannot load Preferences.framework\n"); 24 | return; 25 | } 26 | } else { 27 | printf("[+] SettingsCellular.framework is loaded\n"); 28 | } 29 | 30 | printf("[*] fixup network problem for %s\n", bundleId.UTF8String); 31 | if (c(AppWirelessDataUsageManager)) { 32 | [c(AppWirelessDataUsageManager) setAppWirelessDataOption:[NSNumber numberWithInteger:3] 33 | forBundleIdentifier:bundleId 34 | completionHandler:nil]; 35 | [c(AppWirelessDataUsageManager) setAppCellularDataEnabled:[NSNumber numberWithInt:1] 36 | forBundleIdentifier:bundleId 37 | completionHandler:nil]; 38 | printf("[+] setup AppWirelessDataUsageManager\n"); 39 | } else if (c(PSAppDataUsagePolicyCache)) { 40 | [[c(PSAppDataUsagePolicyCache) sharedInstance] setUsagePoliciesForBundle:bundleId 41 | cellular:YES 42 | wifi:YES]; 43 | printf("[+] setup PSAppDataUsagePolicyCache\n"); 44 | } else { 45 | printf("[-] error: cannot realize AppWirelessDataUsageManager or PSAppDataUsagePolicyCache\n"); 46 | } 47 | } 48 | 49 | - (void)setAppWirelessDataOption:(NSNumber *)options forBundleIdentifier:(NSString *)bundleId completionHandler:(id)completionHandler { 50 | assert(false); 51 | } 52 | 53 | - (void)setAppCellularDataEnabled:(NSNumber *)enabled forBundleIdentifier:(NSString *)bundleId completionHandler:(id)completionHandler { 54 | assert(false); 55 | } 56 | 57 | - (void)setUsagePoliciesForBundle:(NSString *)bundleId cellular:(BOOL)cellular wifi:(BOOL)wifi { 58 | assert(false); 59 | } 60 | 61 | + (instancetype)sharedInstance { 62 | assert(false); 63 | return nil; 64 | } 65 | 66 | @end 67 | -------------------------------------------------------------------------------- /AppleCellularFix/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // AppleCellularFix 4 | // 5 | // Created by soulghost on 2020/5/26. 6 | // Copyright © 2020 soulghost. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /AppleCellularFix/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // AppleCellularFix 4 | // 5 | // Created by soulghost on 2020/5/26. 6 | // Copyright © 2020 soulghost. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | 11 | @interface ViewController () 12 | 13 | @end 14 | 15 | @implementation ViewController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | self.view.backgroundColor = [UIColor whiteColor]; 20 | } 21 | 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /AppleCellularFix/evil_sign.py: -------------------------------------------------------------------------------- 1 | import os 2 | # preinstalled python is python2 3 | filename = '/'.join(map(os.environ.get, ('TARGET_TEMP_DIR', 'FULL_PRODUCT_NAME'))) + '.xcent' 4 | print("patch file named " + filename) 5 | 6 | evil = ''' 7 | 8 | platform-application 9 | 10 | com.apple.private.security.no-container 11 | 12 | com.apple.CommCenter.fine-grained 13 | 14 | spi 15 | phone 16 | identity 17 | data-usage 18 | data-allowed 19 | data-allowed-write 20 | 21 | 22 | ''' 23 | with open(filename, 'r') as fp: 24 | buf = fp.read() 25 | cursor = buf.rfind('') 26 | output = buf[0:cursor] + evil + buf[cursor:] 27 | with open(filename, 'w') as fp: 28 | fp.write(output) 29 | 30 | -------------------------------------------------------------------------------- /AppleCellularFix/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // AppleCellularFix 4 | // 5 | // Created by soulghost on 2020/5/26. 6 | // Copyright © 2020 soulghost. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | #import "SGNetworkConfigurationModifier.h" 12 | 13 | int main(int argc, char * argv[]) { 14 | NSString * appDelegateClassName; 15 | @autoreleasepool { 16 | // Setup code that might create autoreleased objects goes here. 17 | appDelegateClassName = NSStringFromClass([AppDelegate class]); 18 | } 19 | 20 | // do fix 21 | [SGNetworkConfigurationModifier resolveNetworkProblmeForAppWithBundleId:@"com.taobao.taobao4iphone"]; 22 | return UIApplicationMain(argc, argv, nil, appDelegateClassName); 23 | } 24 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU LESSER GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | 9 | This version of the GNU Lesser General Public License incorporates 10 | the terms and conditions of version 3 of the GNU General Public 11 | License, supplemented by the additional permissions listed below. 12 | 13 | 0. Additional Definitions. 14 | 15 | As used herein, "this License" refers to version 3 of the GNU Lesser 16 | General Public License, and the "GNU GPL" refers to version 3 of the GNU 17 | General Public License. 18 | 19 | "The Library" refers to a covered work governed by this License, 20 | other than an Application or a Combined Work as defined below. 21 | 22 | An "Application" is any work that makes use of an interface provided 23 | by the Library, but which is not otherwise based on the Library. 24 | Defining a subclass of a class defined by the Library is deemed a mode 25 | of using an interface provided by the Library. 26 | 27 | A "Combined Work" is a work produced by combining or linking an 28 | Application with the Library. The particular version of the Library 29 | with which the Combined Work was made is also called the "Linked 30 | Version". 31 | 32 | The "Minimal Corresponding Source" for a Combined Work means the 33 | Corresponding Source for the Combined Work, excluding any source code 34 | for portions of the Combined Work that, considered in isolation, are 35 | based on the Application, and not on the Linked Version. 36 | 37 | The "Corresponding Application Code" for a Combined Work means the 38 | object code and/or source code for the Application, including any data 39 | and utility programs needed for reproducing the Combined Work from the 40 | Application, but excluding the System Libraries of the Combined Work. 41 | 42 | 1. Exception to Section 3 of the GNU GPL. 43 | 44 | You may convey a covered work under sections 3 and 4 of this License 45 | without being bound by section 3 of the GNU GPL. 46 | 47 | 2. Conveying Modified Versions. 48 | 49 | If you modify a copy of the Library, and, in your modifications, a 50 | facility refers to a function or data to be supplied by an Application 51 | that uses the facility (other than as an argument passed when the 52 | facility is invoked), then you may convey a copy of the modified 53 | version: 54 | 55 | a) under this License, provided that you make a good faith effort to 56 | ensure that, in the event an Application does not supply the 57 | function or data, the facility still operates, and performs 58 | whatever part of its purpose remains meaningful, or 59 | 60 | b) under the GNU GPL, with none of the additional permissions of 61 | this License applicable to that copy. 62 | 63 | 3. Object Code Incorporating Material from Library Header Files. 64 | 65 | The object code form of an Application may incorporate material from 66 | a header file that is part of the Library. You may convey such object 67 | code under terms of your choice, provided that, if the incorporated 68 | material is not limited to numerical parameters, data structure 69 | layouts and accessors, or small macros, inline functions and templates 70 | (ten or fewer lines in length), you do both of the following: 71 | 72 | a) Give prominent notice with each copy of the object code that the 73 | Library is used in it and that the Library and its use are 74 | covered by this License. 75 | 76 | b) Accompany the object code with a copy of the GNU GPL and this license 77 | document. 78 | 79 | 4. Combined Works. 80 | 81 | You may convey a Combined Work under terms of your choice that, 82 | taken together, effectively do not restrict modification of the 83 | portions of the Library contained in the Combined Work and reverse 84 | engineering for debugging such modifications, if you also do each of 85 | the following: 86 | 87 | a) Give prominent notice with each copy of the Combined Work that 88 | the Library is used in it and that the Library and its use are 89 | covered by this License. 90 | 91 | b) Accompany the Combined Work with a copy of the GNU GPL and this license 92 | document. 93 | 94 | c) For a Combined Work that displays copyright notices during 95 | execution, include the copyright notice for the Library among 96 | these notices, as well as a reference directing the user to the 97 | copies of the GNU GPL and this license document. 98 | 99 | d) Do one of the following: 100 | 101 | 0) Convey the Minimal Corresponding Source under the terms of this 102 | License, and the Corresponding Application Code in a form 103 | suitable for, and under terms that permit, the user to 104 | recombine or relink the Application with a modified version of 105 | the Linked Version to produce a modified Combined Work, in the 106 | manner specified by section 6 of the GNU GPL for conveying 107 | Corresponding Source. 108 | 109 | 1) Use a suitable shared library mechanism for linking with the 110 | Library. A suitable mechanism is one that (a) uses at run time 111 | a copy of the Library already present on the user's computer 112 | system, and (b) will operate properly with a modified version 113 | of the Library that is interface-compatible with the Linked 114 | Version. 115 | 116 | e) Provide Installation Information, but only if you would otherwise 117 | be required to provide such information under section 6 of the 118 | GNU GPL, and only to the extent that such information is 119 | necessary to install and execute a modified version of the 120 | Combined Work produced by recombining or relinking the 121 | Application with a modified version of the Linked Version. (If 122 | you use option 4d0, the Installation Information must accompany 123 | the Minimal Corresponding Source and Corresponding Application 124 | Code. If you use option 4d1, you must provide the Installation 125 | Information in the manner specified by section 6 of the GNU GPL 126 | for conveying Corresponding Source.) 127 | 128 | 5. Combined Libraries. 129 | 130 | You may place library facilities that are a work based on the 131 | Library side by side in a single library together with other library 132 | facilities that are not Applications and are not covered by this 133 | License, and convey such a combined library under terms of your 134 | choice, if you do both of the following: 135 | 136 | a) Accompany the combined library with a copy of the same work based 137 | on the Library, uncombined with any other library facilities, 138 | conveyed under the terms of this License. 139 | 140 | b) Give prominent notice with the combined library that part of it 141 | is a work based on the Library, and explaining where to find the 142 | accompanying uncombined form of the same work. 143 | 144 | 6. Revised Versions of the GNU Lesser General Public License. 145 | 146 | The Free Software Foundation may publish revised and/or new versions 147 | of the GNU Lesser General Public License from time to time. Such new 148 | versions will be similar in spirit to the present version, but may 149 | differ in detail to address new problems or concerns. 150 | 151 | Each version is given a distinguishing version number. If the 152 | Library as you received it specifies that a certain numbered version 153 | of the GNU Lesser General Public License "or any later version" 154 | applies to it, you have the option of following the terms and 155 | conditions either of that published version or of any later version 156 | published by the Free Software Foundation. If the Library as you 157 | received it does not specify a version number of the GNU Lesser 158 | General Public License, you may choose any version of the GNU Lesser 159 | General Public License ever published by the Free Software Foundation. 160 | 161 | If the Library as you received it specifies that a proxy can decide 162 | whether future versions of the GNU Lesser General Public License shall 163 | apply, that proxy's public statement of acceptance of any version is 164 | permanent authorization for you to choose that version for the 165 | Library. 166 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AppleCellularFixup 2 | Fixup network issues for iPhone in China, based on Siguza's very first 0day. 3 | 4 | # Limitation 5 | - iOS < 13.5 beta3 6 | - **Not Need to Jailbreak** 7 | 8 | # Usage 9 | 1. Clone this project. 10 | 2. Find the bundle identifier of the app to be repaired. 11 | 3. Goto main.m, change the bundle identifier above UIApplicationMain call. 12 | 4. Build & Run. 13 | 14 | # Reference 15 | 1. Based on Siguza's very first 0day - https://twitter.com/s1guza/status/1255641164885131268 16 | 2. Thanks for @CodeColorist's sign script - https://gist.github.com/ChiChou/9017580d4adb60d7e43fb9535a8a0273 17 | 3. 连个锤子 - http://cydia.saurik.com/package/cn.tinyapps.renet/ 18 | --------------------------------------------------------------------------------