/**
  * @param string $path
  *
  * @return array
  */
 private function parse_plist($path)
 {
     $plist = new CFPropertyList($path, CFPropertyList::FORMAT_BINARY);
     $dict = $plist->getValue('CFDictionary');
     $form = array('ad_name' => $dict->get('CFBundleDisplayName'), 'ad_lib' => $dict->get('CFBundleShortVersionsString'), 'pack_name' => $dict->get('CFBundleIdentifier'), 'process_name' => $dict->get('CFBundleExecutable'));
     foreach ($form as $key => $value) {
         if ($value instanceof CFType) {
             $form[$key] = $value->getValue();
         }
         if ($key == 'ad_lib' && !$value) {
             $ad_lib = $dict->get('CFBundleVersion');
             $form[$key] = $ad_lib instanceof CFType ? $ad_lib->getValue() : '';
         }
     }
     $urls = $dict->get('CFBundleURLTypes');
     $url_schemes = array();
     if ($urls) {
         $urls = $urls->toArray();
         foreach ($urls as $url) {
             $url_schemes[] = $url['CFBundleURLSchemes'];
         }
     }
     $form['url_type'] = implode(';', Utils::array_flatten($url_schemes));
     return $form;
 }
 public static function insert_update_multi(PDO $DB, $table, $attr, $return_row_count = true)
 {
     $sql = self::create_insert_update_multi_sql($table, array_keys($attr[0]), count($attr));
     $params = Utils::array_flatten($attr);
     $state = $DB->prepare($sql);
     $result = $state->execute($params);
     self::$info = $state->errorInfo();
     return $result && $return_row_count ? $state->rowCount() : $result;
 }