summaryrefslogtreecommitdiffstats
path: root/src/ideviceinstaller.c
diff options
context:
space:
mode:
authorGravatar Martin Szulecki2012-10-21 17:03:42 +0200
committerGravatar Martin Szulecki2012-10-21 17:03:42 +0200
commit02fff36082103a8d51fa9096c74694eca057be75 (patch)
tree37791de0b883012a4da88930e74a03632c6e6076 /src/ideviceinstaller.c
parenta86d3e055f39836f64696f7cf50a6c99bd242a2a (diff)
downloadideviceinstaller-02fff36082103a8d51fa9096c74694eca057be75.tar.gz
ideviceinstaller-02fff36082103a8d51fa9096c74694eca057be75.tar.bz2
Use CFBundleExecutable instead of CFBundleName to construct executable path
Apparently some app archives might miss the CFBundleName key in the Info.plist. This caused ideviceinstaller to fail. The correct key to use is CFBundleExecutable which is apparently also used by the device itself to construct the right path. This should fix compatibility with some app archives.
Diffstat (limited to 'src/ideviceinstaller.c')
-rw-r--r--src/ideviceinstaller.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/src/ideviceinstaller.c b/src/ideviceinstaller.c
index 1d3f383..79961e1 100644
--- a/src/ideviceinstaller.c
+++ b/src/ideviceinstaller.c
@@ -633,7 +633,6 @@ run_again:
633 free(zbuf); 633 free(zbuf);
634 } 634 }
635 635
636 /* we need to get the CFBundleName first */
637 plist_t info = NULL; 636 plist_t info = NULL;
638 zbuf = NULL; 637 zbuf = NULL;
639 len = 0; 638 len = 0;
@@ -693,27 +692,27 @@ run_again:
693 goto leave_cleanup; 692 goto leave_cleanup;
694 } 693 }
695 694
696 char *bundlename = NULL; 695 char *bundleexecutable = NULL;
697 696
698 plist_t bname = plist_dict_get_item(info, "CFBundleName"); 697 plist_t bname = plist_dict_get_item(info, "CFBundleExecutable");
699 if (bname) { 698 if (bname) {
700 plist_get_string_val(bname, &bundlename); 699 plist_get_string_val(bname, &bundleexecutable);
701 } 700 }
702 plist_free(info); 701 plist_free(info);
703 702
704 if (!bundlename) { 703 if (!bundleexecutable) {
705 fprintf(stderr, "Could not determine CFBundleName!\n"); 704 fprintf(stderr, "Could not determine value for CFBundleExecutable!\n");
706 zip_unchange_all(zf); 705 zip_unchange_all(zf);
707 zip_close(zf); 706 zip_close(zf);
708 goto leave_cleanup; 707 goto leave_cleanup;
709 } 708 }
710 709
711 char *sinfname = NULL; 710 char *sinfname = NULL;
712 if (asprintf(&sinfname, "Payload/%s.app/SC_Info/%s.sinf", bundlename, bundlename) < 0) { 711 if (asprintf(&sinfname, "Payload/%s.app/SC_Info/%s.sinf", bundleexecutable, bundleexecutable) < 0) {
713 fprintf(stderr, "Out of memory!?\n"); 712 fprintf(stderr, "Out of memory!?\n");
714 goto leave_cleanup; 713 goto leave_cleanup;
715 } 714 }
716 free(bundlename); 715 free(bundleexecutable);
717 716
718 /* extract .sinf from package */ 717 /* extract .sinf from package */
719 zbuf = NULL; 718 zbuf = NULL;