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:
free(zbuf);
}
- /* we need to get the CFBundleName first */
plist_t info = NULL;
zbuf = NULL;
len = 0;
@@ -693,27 +692,27 @@ run_again:
goto leave_cleanup;
}
- char *bundlename = NULL;
+ char *bundleexecutable = NULL;
- plist_t bname = plist_dict_get_item(info, "CFBundleName");
+ plist_t bname = plist_dict_get_item(info, "CFBundleExecutable");
if (bname) {
- plist_get_string_val(bname, &bundlename);
+ plist_get_string_val(bname, &bundleexecutable);
}
plist_free(info);
- if (!bundlename) {
- fprintf(stderr, "Could not determine CFBundleName!\n");
+ if (!bundleexecutable) {
+ fprintf(stderr, "Could not determine value for CFBundleExecutable!\n");
zip_unchange_all(zf);
zip_close(zf);
goto leave_cleanup;
}
char *sinfname = NULL;
- if (asprintf(&sinfname, "Payload/%s.app/SC_Info/%s.sinf", bundlename, bundlename) < 0) {
+ if (asprintf(&sinfname, "Payload/%s.app/SC_Info/%s.sinf", bundleexecutable, bundleexecutable) < 0) {
fprintf(stderr, "Out of memory!?\n");
goto leave_cleanup;
}
- free(bundlename);
+ free(bundleexecutable);
/* extract .sinf from package */
zbuf = NULL;