0.0.5 • Published 6 years ago

react-native-change-appicon v0.0.5

Weekly downloads
1
License
ISC
Repository
github
Last release
6 years ago

react-native-change-appicon

Change app icon for iOS

Installation

yarn add react-native-change-appicon react-native link react-native-change-appicon

Documentation

1.Add a ViewController to your project as a rootViewController which inherited from UIViewController and write the following code in ViewController.m file:

#import "ViewController.h"
#import <objc/runtime.h>

@interface ViewController ()

@end

@implementation ViewController

- (instancetype)init
{
  self = [super init];
  if (self) {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
      Method presentM = class_getInstanceMethod(self.class, @selector(presentViewController:animated:completion:));
      Method presentSwizzlingM = class_getInstanceMethod(self.class, @selector(ox_presentViewController:animated:completion:));
      method_exchangeImplementations(presentM, presentSwizzlingM);
    });
  }
  return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (void)ox_presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion {
  if ([viewControllerToPresent isKindOfClass:[UIAlertController class]]) {
    UIAlertController *alertController = (UIAlertController *)viewControllerToPresent;
    if (alertController.title == nil && alertController.message == nil) {
      return;
    } else {
      [self ox_presentViewController:viewControllerToPresent animated:flag completion:completion];
      return;
    }
  }
  [self ox_presentViewController:viewControllerToPresent animated:flag completion:completion];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

2.Change the rootViewController at AppDelegate.m of your project:

#import "ViewController.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  ...
  UIViewController *rootViewController = [[ViewController alloc] init];
  rootViewController.view = rootView;
  self.window.rootViewController = rootViewController;
  [self.window makeKeyAndVisible];
  return YES;
}

@end

3.Add icons to your project which you want to change to. (Icons are all in the 'icons' directory in the Example project)

4.Add key-values in the Info.plist file like this: (you should change the icon names 'icon0*.png' to your own icon names and one-to-one correspondence with pictures from icons directory)

CFBundlePrimaryIcon:APP default icon CFBundleAlternateIcons:Alternate icons(All your alternate icons should write here) UINewsstandIcon: news stand icon

your project -> Info.plist -> right click -> Open As -> Source Code:

  <key>CFBundleIcons</key>
  <dict>
    <key>CFBundleAlternateIcons</key>
    <dict>
      <key>icon01.png</key>
      <dict>
        <key>CFBundleIconFiles</key>
        <array>
          <string>icon01.png</string>
        </array>
        <key>UIPrerenderedIcon</key>
        <false/>
      </dict>
      <key>icon02.png</key>
      <dict>
        <key>CFBundleIconFiles</key>
        <array>
          <string>icon02.png</string>
        </array>
        <key>UIPrerenderedIcon</key>
        <false/>
      </dict>
    </dict>
    <key>CFBundlePrimaryIcon</key>
    <dict>
      <key>CFBundleIconFiles</key>
      <array>
        <string>icon01.png</string>
      </array>
      <key>UIPrerenderedIcon</key>
      <false/>
    </dict>
    <key>UINewsstandIcon</key>
    <dict>
      <key>CFBundleIconFiles</key>
      <array>
        <string></string>
      </array>
      <key>UINewsstandBindingEdge</key>
      <string>UINewsstandBindingEdgeLeft</string>
      <key>UINewsstandBindingType</key>
      <string>UINewsstandBindingTypeMagazine</string>
    </dict>
  </dict>

5.Usage:

import ChangeAppIcon from 'react-native-change-appicon';



ChangeAppIcon.changeAppIconWithName('icon02.png');