从我博客搬来的,原文iOS8下代码安装/卸载APP,写上了一些注释。不知道复制过来之后还有没有代码高亮,没有的话,直接看原文会好一点。当然,需要MobileInstallation这个Framework
#import <Foundation/Foundation.h>
#import <spawn.h>
#import <sys/wait.h>
#import <UIKit/UIKit.h>
/*!
* @brief Mobile Installation 的回调定义
*/
typedef void (*MobileInstallationCallback)(CFDictionaryRef information);
/*!
* @brief Mobile Installation 安装App (8.0)
* @param bundlePath IPA文件路径
* @param parameters unknown
* @param unknown1 unknown
* @param unknown2 unknown
*/
extern int MobileInstallationInstallForLaunchServices(CFStringRef bundlePath, CFDictionaryRef parameters, void *unknown1, void *unknown2) NS_AVAILABLE_IOS(8_0);
/*!
* @brief Mobile Installation 卸载App (8.0)
* @param bundleIdentifier App的Bundle ID
* @param parameters unknown
* @param callback Mobile Installation 的回调
* @param unknown unknown
*/
extern int MobileInstallationUninstallForLaunchServices(CFStringRefbundleIdentifier, CFDictionaryRef parameters, MobileInstallationCallbackcallback, void *unknown) NS_AVAILABLE_IOS(8_0);
/*!
* @brief 为了稍后使用POSIX SPAWN
*/
extern char **environ;
/*!
* @brief 更新SpringBoard图标, 依赖uicache
*/
void uicache(void);
void uicache(void){
posix_spawnattr_t attr;
posix_spawn_file_actions_t fact;
pid_t pid;
char cmd]="uicache";
char *args[2];
args[0]=cmd;
args[1]=NULL;
posix_spawnattr_init(&attr);
posix_spawn_file_actions_init(&fact);
posix_spawn(&pid,"/usr/bin/uicache",&fact,&attr,args,environ);
int stat=0;
waitpid(pid,&stat,0);
}
int main (int argc, const char * argv]){
@autoreleasepool{
#pragma mark
#pragma mark - Install
CFStringRef path = CFStringCreateWithCString(kCFAllocatorDefault, "/PATH/TO/IPA/FILE", kCFStringEncodingUTF8);
MobileInstallationInstallForLaunchServices(path, NULL, NULL, NULL);
#pragma mark
#pragma mark - Uninstall
CFStringRef identifier = CFStringCreateWithCString(kCFAllocatorDefault, "APP.BUNDLE.ID", kCFStringEncodingUTF8);
if (identifier != NULL) {
MobileInstallationUninstallForLaunchServices(identifier, NULL, NULL, NULL);
CFRelease(identifier);
}
#pragma mark
#pragma mark - UICache
uicache();
}
return 0;
}