├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── RNDynamicAppIcon.podspec ├── index.js ├── ios ├── RNDynamicAppIcon.h ├── RNDynamicAppIcon.m ├── RNDynamicAppIcon.podspec ├── RNDynamicAppIcon.xcodeproj │ └── project.pbxproj └── RNDynamicAppIcon.xcworkspace │ └── contents.xcworkspacedata └── package.json /.gitattributes: -------------------------------------------------------------------------------- 1 | *.pbxproj -text -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # OSX 3 | # 4 | .DS_Store 5 | 6 | # node.js 7 | # 8 | node_modules/ 9 | npm-debug.log 10 | yarn-error.log 11 | 12 | 13 | # Xcode 14 | # 15 | build/ 16 | *.pbxuser 17 | !default.pbxuser 18 | *.mode1v3 19 | !default.mode1v3 20 | *.mode2v3 21 | !default.mode2v3 22 | *.perspectivev3 23 | !default.perspectivev3 24 | xcuserdata 25 | *.xccheckout 26 | *.moved-aside 27 | DerivedData 28 | *.hmap 29 | *.ipa 30 | *.xcuserstate 31 | project.xcworkspace 32 | 33 | 34 | # Android/IntelliJ 35 | # 36 | build/ 37 | .idea 38 | .gradle 39 | local.properties 40 | *.iml 41 | 42 | # BUCK 43 | buck-out/ 44 | \.buckd/ 45 | *.keystore 46 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2018 idearockers 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 | 2 | # React Native Dynamic App Icon 3 | 4 | Since iOS 10.3 Apple supports alternate App Icons to be set programmatically. This package integrates this functionality as React Native module. Android is not (yet?) supported. 5 | 6 | ## Table of Contents 7 | 8 | - [Install](#install) 9 | - [Add alternate icons](#add-alternate-icons) 10 | - [Usage](#usage) 11 | - [API](#api) 12 | - [License](#license) 13 | 14 | ## Install 15 | 16 | ``` 17 | $ npm install react-native-dynamic-app-icon 18 | ``` 19 | 20 | ### Mostly automatic installation 21 | 22 | ``` 23 | $ react-native link react-native-dynamic-app-icon 24 | ``` 25 | 26 | ### Manual installation 27 | 28 | 1. In XCode, in the project navigator, right click `Libraries` ➜ `Add Files to [your project's name]` 29 | 2. Go to `node_modules` ➜ `react-native-dynamic-app-icon` and add `RNDynamicAppIcon.xcodeproj` 30 | 3. In XCode, in the project navigator, select your project. Add `libRNDynamicAppIcon.a` to your project's `Build Phases` ➜ `Link Binary With Libraries` 31 | 4. Run your project 32 | 33 | ## Add alternate icons 34 | 35 | Alternate icons have to be placed directly in your Xcode project rather than inside an asset catalogue. The `@2x` and `@3x` naming convention is supported as usual. 36 | 37 | ### Adjust `info.plist` 38 | 39 | Copy the following to your `info.plist` and adjust it as needed. Omit the file extension (and `@2x`) part, Xcode will pick them accordingly. You can add more alternate icons by copying the an alternate block. 40 | 41 | ``` 42 | CFBundleIcons 43 | 44 | CFBundleAlternateIcons 45 | 46 | alternate 47 | 48 | CFBundleIconFiles 49 | 50 | AppIcon_alternate 51 | 52 | UIPrerenderedIcon 53 | 54 | 55 | alternate2 56 | 57 | CFBundleIconFiles 58 | 59 | AppIcon_alternate2 60 | 61 | UIPrerenderedIcon 62 | 63 | 64 | CFBundlePrimaryIcon 65 | 66 | CFBundleIconFiles 67 | 68 | FILENAME 69 | 70 | 71 | 72 | 73 | ``` 74 | 75 | ## Usage 76 | 77 | ```javascript 78 | import AppIcon from 'react-native-dynamic-app-icon'; 79 | 80 | AppIcon.setAppIcon('alternate'); 81 | 82 | AppIcon.getIconName(result => { 83 | alert( 'Icon name: ' + result.iconName ); 84 | }); 85 | ``` 86 | 87 | ## Api 88 | 89 | ### setAppIcon(key: string) 90 | 91 | To change the app icon call this method with one of the alternate app icons keys specified in your `plist.info`. To reset to the default app icon pass `null`. 92 | 93 | ### supportsDynamicAppIcon() 94 | 95 | Returns a promise which resolves to a boolean. 96 | 97 | ### getIconName(callback(result)) 98 | 99 | Returns a callback with an object containing the icon name. Example: `{iconName: 'default'}`. 100 | 101 | ## License 102 | 103 | [MIT](https://github.com/idearockers/react-native-dynamic-app-icon/blob/master/LICENSE) © [idearockers](https://www.idearockers.com/) 104 | -------------------------------------------------------------------------------- /RNDynamicAppIcon.podspec: -------------------------------------------------------------------------------- 1 | require 'json' 2 | 3 | package = JSON.parse(File.read(File.join(__dir__, 'package.json'))) 4 | 5 | Pod::Spec.new do |s| 6 | s.name = 'RNDynamicAppIcon' 7 | s.version = package['version'] 8 | s.summary = package['description'] 9 | s.license = package['license'] 10 | s.homepage = package['homepage'] 11 | s.authors = package['author'] 12 | s.source = { :git => package['repository']['url'], :tag => s.version } 13 | s.source_files = 'ios/**/*.{h,m}' 14 | s.requires_arc = true 15 | s.platforms = { :ios => "8.0", :tvos => "9.2" } 16 | s.dependency 'React' 17 | end 18 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | 2 | import { NativeModules } from 'react-native'; 3 | 4 | const { RNDynamicAppIcon } = NativeModules; 5 | 6 | export default RNDynamicAppIcon; 7 | -------------------------------------------------------------------------------- /ios/RNDynamicAppIcon.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface RNDynamicAppIcon : NSObject 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /ios/RNDynamicAppIcon.m: -------------------------------------------------------------------------------- 1 | 2 | #import "React/RCTLog.h" 3 | 4 | #import "RNDynamicAppIcon.h" 5 | 6 | @implementation RNDynamicAppIcon 7 | 8 | #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 9 | 10 | RCT_EXPORT_MODULE() 11 | 12 | RCT_EXPORT_METHOD(setAppIcon:(NSString *)name) 13 | { 14 | [[UIApplication sharedApplication] setAlternateIconName:name completionHandler:^(NSError * _Nullable error) { 15 | if (error != nil) { 16 | RCTLog(@"%@", [error description]); 17 | } 18 | }]; 19 | } 20 | 21 | RCT_REMAP_METHOD(supportsDynamicAppIcon, resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) 22 | { 23 | bool supported = [[UIApplication sharedApplication] supportsAlternateIcons]; 24 | resolve(@(supported)); 25 | } 26 | 27 | RCT_EXPORT_METHOD(getIconName:(RCTResponseSenderBlock) callback ){ 28 | NSString *name = @"default"; 29 | NSDictionary *results; 30 | 31 | if( SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.3") ){ 32 | if( [[UIApplication sharedApplication] supportsAlternateIcons ] ){ 33 | name = [[UIApplication sharedApplication] alternateIconName]; 34 | if( name == nil ){ 35 | name = @"default"; 36 | } 37 | } 38 | } 39 | 40 | results = @{ 41 | @"iconName":name 42 | }; 43 | callback(@[results]); 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /ios/RNDynamicAppIcon.podspec: -------------------------------------------------------------------------------- 1 | 2 | Pod::Spec.new do |s| 3 | s.name = "RNDynamicAppIcon" 4 | s.version = "1.0.0" 5 | s.summary = "RNDynamicAppIcon" 6 | s.description = <<-DESC 7 | RNDynamicAppIcon 8 | DESC 9 | s.homepage = "" 10 | s.license = "MIT" 11 | # s.license = { :type => "MIT", :file => "FILE_LICENSE" } 12 | s.author = { "author" => "lars@idearockers.com" } 13 | s.platform = :ios, "7.0" 14 | s.source = { :git => "https://github.com/idearockers/react-native-dynamic-app-icon.git", :tag => "master" } 15 | s.source_files = "RNDynamicAppIcon/**/*.{h,m}" 16 | s.requires_arc = true 17 | 18 | 19 | s.dependency "React" 20 | #s.dependency "others" 21 | 22 | end 23 | 24 | -------------------------------------------------------------------------------- /ios/RNDynamicAppIcon.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | B3E7B58A1CC2AC0600A0062D /* RNDynamicAppIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = B3E7B5891CC2AC0600A0062D /* RNDynamicAppIcon.m */; }; 11 | /* End PBXBuildFile section */ 12 | 13 | /* Begin PBXCopyFilesBuildPhase section */ 14 | 58B511D91A9E6C8500147676 /* CopyFiles */ = { 15 | isa = PBXCopyFilesBuildPhase; 16 | buildActionMask = 2147483647; 17 | dstPath = "include/$(PRODUCT_NAME)"; 18 | dstSubfolderSpec = 16; 19 | files = ( 20 | ); 21 | runOnlyForDeploymentPostprocessing = 0; 22 | }; 23 | /* End PBXCopyFilesBuildPhase section */ 24 | 25 | /* Begin PBXFileReference section */ 26 | 134814201AA4EA6300B7C361 /* libRNDynamicAppIcon.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRNDynamicAppIcon.a; sourceTree = BUILT_PRODUCTS_DIR; }; 27 | B3E7B5881CC2AC0600A0062D /* RNDynamicAppIcon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RNDynamicAppIcon.h; sourceTree = ""; }; 28 | B3E7B5891CC2AC0600A0062D /* RNDynamicAppIcon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RNDynamicAppIcon.m; sourceTree = ""; }; 29 | /* End PBXFileReference section */ 30 | 31 | /* Begin PBXFrameworksBuildPhase section */ 32 | 58B511D81A9E6C8500147676 /* Frameworks */ = { 33 | isa = PBXFrameworksBuildPhase; 34 | buildActionMask = 2147483647; 35 | files = ( 36 | ); 37 | runOnlyForDeploymentPostprocessing = 0; 38 | }; 39 | /* End PBXFrameworksBuildPhase section */ 40 | 41 | /* Begin PBXGroup section */ 42 | 134814211AA4EA7D00B7C361 /* Products */ = { 43 | isa = PBXGroup; 44 | children = ( 45 | 134814201AA4EA6300B7C361 /* libRNDynamicAppIcon.a */, 46 | ); 47 | name = Products; 48 | sourceTree = ""; 49 | }; 50 | 58B511D21A9E6C8500147676 = { 51 | isa = PBXGroup; 52 | children = ( 53 | B3E7B5881CC2AC0600A0062D /* RNDynamicAppIcon.h */, 54 | B3E7B5891CC2AC0600A0062D /* RNDynamicAppIcon.m */, 55 | 134814211AA4EA7D00B7C361 /* Products */, 56 | ); 57 | sourceTree = ""; 58 | }; 59 | /* End PBXGroup section */ 60 | 61 | /* Begin PBXNativeTarget section */ 62 | 58B511DA1A9E6C8500147676 /* RNDynamicAppIcon */ = { 63 | isa = PBXNativeTarget; 64 | buildConfigurationList = 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "RNDynamicAppIcon" */; 65 | buildPhases = ( 66 | 58B511D71A9E6C8500147676 /* Sources */, 67 | 58B511D81A9E6C8500147676 /* Frameworks */, 68 | 58B511D91A9E6C8500147676 /* CopyFiles */, 69 | ); 70 | buildRules = ( 71 | ); 72 | dependencies = ( 73 | ); 74 | name = RNDynamicAppIcon; 75 | productName = RCTDataManager; 76 | productReference = 134814201AA4EA6300B7C361 /* libRNDynamicAppIcon.a */; 77 | productType = "com.apple.product-type.library.static"; 78 | }; 79 | /* End PBXNativeTarget section */ 80 | 81 | /* Begin PBXProject section */ 82 | 58B511D31A9E6C8500147676 /* Project object */ = { 83 | isa = PBXProject; 84 | attributes = { 85 | LastUpgradeCheck = 0940; 86 | ORGANIZATIONNAME = Facebook; 87 | TargetAttributes = { 88 | 58B511DA1A9E6C8500147676 = { 89 | CreatedOnToolsVersion = 6.1.1; 90 | }; 91 | }; 92 | }; 93 | buildConfigurationList = 58B511D61A9E6C8500147676 /* Build configuration list for PBXProject "RNDynamicAppIcon" */; 94 | compatibilityVersion = "Xcode 3.2"; 95 | developmentRegion = English; 96 | hasScannedForEncodings = 0; 97 | knownRegions = ( 98 | en, 99 | ); 100 | mainGroup = 58B511D21A9E6C8500147676; 101 | productRefGroup = 58B511D21A9E6C8500147676; 102 | projectDirPath = ""; 103 | projectRoot = ""; 104 | targets = ( 105 | 58B511DA1A9E6C8500147676 /* RNDynamicAppIcon */, 106 | ); 107 | }; 108 | /* End PBXProject section */ 109 | 110 | /* Begin PBXSourcesBuildPhase section */ 111 | 58B511D71A9E6C8500147676 /* Sources */ = { 112 | isa = PBXSourcesBuildPhase; 113 | buildActionMask = 2147483647; 114 | files = ( 115 | B3E7B58A1CC2AC0600A0062D /* RNDynamicAppIcon.m in Sources */, 116 | ); 117 | runOnlyForDeploymentPostprocessing = 0; 118 | }; 119 | /* End PBXSourcesBuildPhase section */ 120 | 121 | /* Begin XCBuildConfiguration section */ 122 | 58B511ED1A9E6C8500147676 /* Debug */ = { 123 | isa = XCBuildConfiguration; 124 | buildSettings = { 125 | ALWAYS_SEARCH_USER_PATHS = NO; 126 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 127 | CLANG_CXX_LIBRARY = "libc++"; 128 | CLANG_ENABLE_MODULES = YES; 129 | CLANG_ENABLE_OBJC_ARC = YES; 130 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 131 | CLANG_WARN_BOOL_CONVERSION = YES; 132 | CLANG_WARN_COMMA = YES; 133 | CLANG_WARN_CONSTANT_CONVERSION = YES; 134 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 135 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 136 | CLANG_WARN_EMPTY_BODY = YES; 137 | CLANG_WARN_ENUM_CONVERSION = YES; 138 | CLANG_WARN_INFINITE_RECURSION = YES; 139 | CLANG_WARN_INT_CONVERSION = YES; 140 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 141 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 142 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 143 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 144 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 145 | CLANG_WARN_STRICT_PROTOTYPES = YES; 146 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 147 | CLANG_WARN_UNREACHABLE_CODE = YES; 148 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 149 | COPY_PHASE_STRIP = NO; 150 | ENABLE_STRICT_OBJC_MSGSEND = YES; 151 | ENABLE_TESTABILITY = YES; 152 | GCC_C_LANGUAGE_STANDARD = gnu99; 153 | GCC_DYNAMIC_NO_PIC = NO; 154 | GCC_NO_COMMON_BLOCKS = YES; 155 | GCC_OPTIMIZATION_LEVEL = 0; 156 | GCC_PREPROCESSOR_DEFINITIONS = ( 157 | "DEBUG=1", 158 | "$(inherited)", 159 | ); 160 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 161 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 162 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 163 | GCC_WARN_UNDECLARED_SELECTOR = YES; 164 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 165 | GCC_WARN_UNUSED_FUNCTION = YES; 166 | GCC_WARN_UNUSED_VARIABLE = YES; 167 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 168 | MTL_ENABLE_DEBUG_INFO = YES; 169 | ONLY_ACTIVE_ARCH = YES; 170 | SDKROOT = iphoneos; 171 | }; 172 | name = Debug; 173 | }; 174 | 58B511EE1A9E6C8500147676 /* Release */ = { 175 | isa = XCBuildConfiguration; 176 | buildSettings = { 177 | ALWAYS_SEARCH_USER_PATHS = NO; 178 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 179 | CLANG_CXX_LIBRARY = "libc++"; 180 | CLANG_ENABLE_MODULES = YES; 181 | CLANG_ENABLE_OBJC_ARC = YES; 182 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 183 | CLANG_WARN_BOOL_CONVERSION = YES; 184 | CLANG_WARN_COMMA = YES; 185 | CLANG_WARN_CONSTANT_CONVERSION = YES; 186 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 187 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 188 | CLANG_WARN_EMPTY_BODY = YES; 189 | CLANG_WARN_ENUM_CONVERSION = YES; 190 | CLANG_WARN_INFINITE_RECURSION = YES; 191 | CLANG_WARN_INT_CONVERSION = YES; 192 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 193 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 194 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 195 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 196 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 197 | CLANG_WARN_STRICT_PROTOTYPES = YES; 198 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 199 | CLANG_WARN_UNREACHABLE_CODE = YES; 200 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 201 | COPY_PHASE_STRIP = YES; 202 | ENABLE_NS_ASSERTIONS = NO; 203 | ENABLE_STRICT_OBJC_MSGSEND = YES; 204 | GCC_C_LANGUAGE_STANDARD = gnu99; 205 | GCC_NO_COMMON_BLOCKS = YES; 206 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 207 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 208 | GCC_WARN_UNDECLARED_SELECTOR = YES; 209 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 210 | GCC_WARN_UNUSED_FUNCTION = YES; 211 | GCC_WARN_UNUSED_VARIABLE = YES; 212 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 213 | MTL_ENABLE_DEBUG_INFO = NO; 214 | SDKROOT = iphoneos; 215 | VALIDATE_PRODUCT = YES; 216 | }; 217 | name = Release; 218 | }; 219 | 58B511F01A9E6C8500147676 /* Debug */ = { 220 | isa = XCBuildConfiguration; 221 | buildSettings = { 222 | HEADER_SEARCH_PATHS = ( 223 | "$(inherited)", 224 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 225 | "$(SRCROOT)/../../../React/**", 226 | "$(SRCROOT)/../../react-native/React/**", 227 | ); 228 | LIBRARY_SEARCH_PATHS = "$(inherited)"; 229 | OTHER_LDFLAGS = "-ObjC"; 230 | PRODUCT_NAME = RNDynamicAppIcon; 231 | SKIP_INSTALL = YES; 232 | }; 233 | name = Debug; 234 | }; 235 | 58B511F11A9E6C8500147676 /* Release */ = { 236 | isa = XCBuildConfiguration; 237 | buildSettings = { 238 | HEADER_SEARCH_PATHS = ( 239 | "$(inherited)", 240 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 241 | "$(SRCROOT)/../../../React/**", 242 | "$(SRCROOT)/../../react-native/React/**", 243 | ); 244 | LIBRARY_SEARCH_PATHS = "$(inherited)"; 245 | OTHER_LDFLAGS = "-ObjC"; 246 | PRODUCT_NAME = RNDynamicAppIcon; 247 | SKIP_INSTALL = YES; 248 | }; 249 | name = Release; 250 | }; 251 | /* End XCBuildConfiguration section */ 252 | 253 | /* Begin XCConfigurationList section */ 254 | 58B511D61A9E6C8500147676 /* Build configuration list for PBXProject "RNDynamicAppIcon" */ = { 255 | isa = XCConfigurationList; 256 | buildConfigurations = ( 257 | 58B511ED1A9E6C8500147676 /* Debug */, 258 | 58B511EE1A9E6C8500147676 /* Release */, 259 | ); 260 | defaultConfigurationIsVisible = 0; 261 | defaultConfigurationName = Release; 262 | }; 263 | 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "RNDynamicAppIcon" */ = { 264 | isa = XCConfigurationList; 265 | buildConfigurations = ( 266 | 58B511F01A9E6C8500147676 /* Debug */, 267 | 58B511F11A9E6C8500147676 /* Release */, 268 | ); 269 | defaultConfigurationIsVisible = 0; 270 | defaultConfigurationName = Release; 271 | }; 272 | /* End XCConfigurationList section */ 273 | }; 274 | rootObject = 58B511D31A9E6C8500147676 /* Project object */; 275 | } 276 | -------------------------------------------------------------------------------- /ios/RNDynamicAppIcon.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | 3 | 5 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-native-dynamic-app-icon", 3 | "version": "1.1.0", 4 | "description": "Programmatically change the app icon in React Native.", 5 | "homepage": "https://github.com/idearockers/react-native-dynamic-app-icon", 6 | "keywords": [ 7 | "react-native", 8 | "app", 9 | "dynamic", 10 | "icon", 11 | "app-icon", 12 | "alternate" 13 | ], 14 | "main": "index.js", 15 | "repository": { 16 | "type": "git", 17 | "url": "https://github.com/idearockers/react-native-dynamic-app-icon.git" 18 | }, 19 | "bugs": { 20 | "url": "https://github.com/idearockers/react-native-dynamic-app-icon/issues" 21 | }, 22 | "author": "idearockers (https://www.idearockers.com)", 23 | "license": "MIT", 24 | "peerDependencies": { 25 | "react-native": ">=0.41.2" 26 | } 27 | } 28 | --------------------------------------------------------------------------------