summaryrefslogtreecommitdiffstats
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
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.
-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;