Add --json support for list_bundle_id (#457)

* add --json support for list_bundle_id

* only get result's keys when --json is not set

Co-authored-by: ryan.luo <ryan.luo@bytedance.com>
Co-authored-by: Gabe Giosia <giosia@google.com>
diff --git a/src/ios-deploy/ios-deploy.m b/src/ios-deploy/ios-deploy.m
index e19c420..c20db70 100644
--- a/src/ios-deploy/ios-deploy.m
+++ b/src/ios-deploy/ios-deploy.m
@@ -1580,18 +1580,28 @@
     check_error(AMDeviceValidatePairing(device));
     check_error(AMDeviceStartSession(device));
 
-    NSArray *a = [NSArray arrayWithObjects:@"CFBundleIdentifier", nil];
+    NSArray *a = [NSArray arrayWithObjects:
+                  @"CFBundleIdentifier",
+                  @"CFBundleName",
+                  @"CFBundleDisplayName",
+                  @"CFBundleVersion",
+                  @"CFBundleShortVersionString", nil];
     NSDictionary *optionsDict = [NSDictionary dictionaryWithObject:a forKey:@"ReturnAttributes"];
     CFDictionaryRef options = (CFDictionaryRef)optionsDict;
     CFDictionaryRef result = nil;
     check_error(AMDeviceLookupApplications(device, options, &result));
 
-    CFIndex count;
-    count = CFDictionaryGetCount(result);
-    const void *keys[count];
-    CFDictionaryGetKeysAndValues(result, keys, NULL);
-    for(int i = 0; i < count; ++i) {
-        NSLogOut(@"%@", (CFStringRef)keys[i]);
+    if (_json_output) {
+        NSLogJSON(@{@"Event": @"ListBundleId",
+                    @"Apps": (NSDictionary *)result});
+    } else {
+        CFIndex count;
+        count = CFDictionaryGetCount(result);
+        const void *keys[count];
+        CFDictionaryGetKeysAndValues(result, keys, NULL);
+        for(int i = 0; i < count; ++i) {
+            NSLogOut(@"%@", (CFStringRef)keys[i]);
+        }
     }
 
     check_error(AMDeviceStopSession(device));