Updated code to latest libiphone API change
diff --git a/src/iphoneinstaller.c b/src/iphoneinstaller.c
index 8787a24..04ac341 100644
--- a/src/iphoneinstaller.c
+++ b/src/iphoneinstaller.c
@@ -379,7 +379,8 @@
 
 	if (list_apps_mode) {
 		int xml_mode = 0;
-		instproxy_apptype_t apptype = INSTPROXY_APPTYPE_USER;
+		plist_t client_opts = instproxy_client_options_new();
+		instproxy_client_options_add(client_opts, "ApplicationType", "User", NULL);
 		instproxy_error_t err;
 		plist_t apps = NULL;
 
@@ -389,11 +390,15 @@
 			char *elem = strtok(opts, ",");
 			while (elem) {
 				if (!strcmp(elem, "list_system")) {
-					apptype = INSTPROXY_APPTYPE_SYSTEM;
+					if (!client_opts) {
+						client_opts = instproxy_client_options_new();
+					}
+					instproxy_client_options_add(client_opts, "ApplicationType", "System", NULL);
 				} else if (!strcmp(elem, "list_all")) {
-					apptype = INSTPROXY_APPTYPE_ALL;
+					instproxy_client_options_free(client_opts);
+					client_opts = NULL;
 				} else if (!strcmp(elem, "list_user")) {
-					apptype = INSTPROXY_APPTYPE_USER;
+					/* do nothing, we're already set */
 				} else if (!strcmp(elem, "xml")) {
 					xml_mode = 1;
 				}
@@ -401,7 +406,8 @@
 			}
 		}
 
-		err = instproxy_browse(ipc, apptype, &apps);
+		err = instproxy_browse(ipc, client_opts, &apps);
+		instproxy_client_options_free(client_opts);
 		if (err != INSTPROXY_E_SUCCESS) {
 			fprintf(stderr, "ERROR: instproxy_browse returned %d\n", err);
 			goto leave_cleanup;
@@ -641,18 +647,26 @@
 		printf("done.\n");
 
 		/* perform installation or upgrade */
+		plist_t client_opts = instproxy_client_options_new();
+		if (sinf) {
+			instproxy_client_options_add(client_opts, "ApplicationSINF", sinf, NULL);
+		}
+		if (meta) {
+			instproxy_client_options_add(client_opts, "iTunesMetadata", meta, NULL);
+		}
 		if (install_mode) {
 			printf("Installing '%s'\n", pkgname);
-			instproxy_install(ipc, pkgname, sinf, meta, status_cb);
+			instproxy_install(ipc, pkgname, client_opts, status_cb);
 		} else {
 			printf("Upgrading '%s'\n", pkgname);
-			instproxy_upgrade(ipc, pkgname, sinf, meta, status_cb);
+			instproxy_upgrade(ipc, pkgname, client_opts, status_cb);
 		}
+		instproxy_client_options_free(client_opts);
 		free(pkgname);
 		wait_for_op_complete = 1;
 		notification_expected = 1;
 	} else if (uninstall_mode) {
-		instproxy_uninstall(ipc, appid, status_cb);
+		instproxy_uninstall(ipc, appid, NULL, status_cb);
 		wait_for_op_complete = 1;
 		notification_expected = 1;
 	} else if (list_archives_mode) {
@@ -673,7 +687,7 @@
 			}
 		}
 
-		err = instproxy_lookup_archives(ipc, &dict);
+		err = instproxy_lookup_archives(ipc, NULL, &dict);
 		if (err != INSTPROXY_E_SUCCESS) {
 			fprintf(stderr, "ERROR: lookup_archives returned %d\n", err);
 			goto leave_cleanup;
@@ -747,18 +761,21 @@
 		while (node);
 		plist_free(dict);
 	} else if (archive_mode) {
-		uint32_t opt = INSTPROXY_ARCHIVE_SKIP_UNINSTALL;
 		char *copy_path = NULL;
 		int remove_after_copy = 0;
+		int skip_uninstall = 1;
+		int app_only = 0;
+		plist_t client_opts = NULL;
+
 		/* look for options */
 		if (options) {
 			char *opts = strdup(options);
 			char *elem = strtok(opts, ",");
 			while (elem) {
 				if (!strcmp(elem, "uninstall")) {
-					opt &= ~INSTPROXY_ARCHIVE_SKIP_UNINSTALL;
+					skip_uninstall = 0;
 				} else if (!strcmp(elem, "app_only")) {
-					opt |= INSTPROXY_ARCHIVE_APP_ONLY;
+					app_only = 1;
 				} else if ((strlen(elem) > 5) && !strncmp(elem, "copy=", 5)) {
 					copy_path = strdup(elem+5);
 				} else if (!strcmp(elem, "remove")) {
@@ -768,6 +785,16 @@
 			}
 		}
 
+		if (skip_uninstall || app_only) {
+			client_opts = instproxy_client_options_new();
+			if (skip_uninstall) {
+				instproxy_client_options_add(client_opts, "SkipUninstall", 1, NULL);
+			}
+			if (app_only) {
+				instproxy_client_options_add(client_opts, "ArchiveType", "ApplicationOnly", NULL);
+			}
+		}
+
 		if (copy_path) {
 			struct stat fst;
 			if (stat(copy_path, &fst) != 0) {
@@ -798,9 +825,10 @@
 			}
 		}
 
-		instproxy_archive(ipc, appid, opt, status_cb);
+		instproxy_archive(ipc, appid, client_opts, status_cb);
+		instproxy_client_options_free(client_opts);
 		wait_for_op_complete = 1;
-		if (opt & INSTPROXY_ARCHIVE_SKIP_UNINSTALL) {
+		if (skip_uninstall) {
 			notification_expected = 0;
 		} else {
 			notification_expected = 1;
@@ -931,11 +959,11 @@
 		}
 		goto leave_cleanup;
 	} else if (restore_mode) {
-		instproxy_restore(ipc, appid, status_cb);
+		instproxy_restore(ipc, appid, NULL, status_cb);
 		wait_for_op_complete = 1;
 		notification_expected = 1;
 	} else if (remove_archive_mode) {
-		instproxy_remove_archive(ipc, appid, status_cb);
+		instproxy_remove_archive(ipc, appid, NULL, status_cb);
 		wait_for_op_complete = 1;
 	} else {
 		printf