├── PUSHTest.res ├── info.plist.TemplateiOS.xml ├── PUSHTest.dpr ├── Entitlement.TemplateiOS.xml ├── _clean.bat ├── README.md ├── .gitignore ├── uMain.fmx ├── AndroidManifest.template.xml ├── pushTest ├── push.php ├── api.php └── common.php ├── uMain.pas ├── PUSHTest.deployproj └── PUSHTest.dproj /PUSHTest.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rzaripov1990/PUSHTestFCM/HEAD/PUSHTest.res -------------------------------------------------------------------------------- /info.plist.TemplateiOS.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | <%VersionInfoPListKeys%> 6 | <%ExtraInfoPListKeys%> 7 | 8 | 9 | -------------------------------------------------------------------------------- /PUSHTest.dpr: -------------------------------------------------------------------------------- 1 | program PUSHTest; 2 | 3 | uses 4 | System.StartUpCopy, 5 | FMX.Forms, 6 | uMain in 'uMain.pas' {FormMain}; 7 | 8 | {$R *.res} 9 | 10 | begin 11 | Application.Initialize; 12 | Application.CreateForm(TFormMain, FormMain); 13 | Application.Run; 14 | 15 | end. 16 | -------------------------------------------------------------------------------- /Entitlement.TemplateiOS.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | <%getTaskAllowKey%> 6 | <%applicationIdentifier%> 7 | <%pushNotificationKey%> 8 | <%keychainAccessGroups%> 9 | 10 | 11 | -------------------------------------------------------------------------------- /_clean.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | ECHO Cleaning... 3 | 4 | del /S %1*.str%2%3%4 5 | del /S %1*.rsm%2%3%4 6 | del /S %1*.lib%2%3%4 7 | del /S %1*.err%2%3%4 8 | del /S %1*.tds%2%3%4 9 | del /S %1*.hpp%2%3%4 10 | del /S %1*.obj%2%3%4 11 | del /S %1*.tds%2%3%4 12 | rem del /S %1*.map%2%3%4 13 | del /S %1*.drc%2%3%4 14 | del /S %1*.#*%2%3%4 15 | del /S %1*.csm%2%3%4 16 | del /S %1*.bpi%2%3%4 17 | del /S %1*.lib%2%3%4 18 | del /S %1*.ilc%2%3%4 19 | del /S %1*.ild%2%3%4 20 | del /S %1*.ilf%2%3%4 21 | del /S %1*.ils%2%3%4 22 | del /S %1*.cgi%2%3%4 23 | del /S %1*.drc%2%3%4 24 | del /S %1*.$*%2%3%4 25 | del /S %1*.dcu%2%3%4 26 | del /S %1*.bak%2%3%4 27 | del /S %1*.gid%2%3%4 28 | del /S %1*.fts%2%3%4 29 | del /S %1*.~*%2%3%4 30 | del /S %1*.dsk%2%3%4 31 | del /S %1*.ddp%2%3%4 32 | del /S %1*.bkm%2%3%4 33 | del /S %1*_orig_?.*%2%3%4 34 | del /S %1*.ressrc%2%3%4 35 | del /S %1*.cesettings%2%3%4 36 | del /S %1*.stat%2%3%4 37 | del /S %1*.identcache%2%3%4 38 | del /S %1*.local%2%3%4 39 | 40 | for /r . %%a in (__history\) do @if exist "%%a" rd /s /q "%%a" 41 | for /r . %%a in (__recovery\) do @if exist "%%a" rd /s /q "%%a" -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PUSHTestFCM 2 | [FireMonkey] FCM Push test project 3 | 4 | ### Подготовка 5 | прочтите внимательно статьи 6 | * http://blog.rzaripov.kz/2017/02/firebase-android-ios.html 7 | * http://blog.rzaripov.kz/2017/02/firebase-android-ios-2.html 8 | 9 | ### Серверная часть 10 | ###### Поместите папку `pushTest` к себе на сервер, в корень сайта 11 | ###### настройте доступ к БД и параметры из консоли Firebase (файл `api.php`) 12 | 13 | ``` 14 | $config['db']['host'] = "расположение БД"; // localhost 15 | $config['db']['name'] = "название БД"; 16 | $config['db']['user'] = "пользователь"; 17 | $config['db']['pass'] = "пароль к БД"; 18 | $config['push']['server_key'] = "тут серверный ключ из консоли firebase"; 19 | $config['app']['name'] = "название пакета приложения для IOS"; //com.embarcadero.PUSHTest 20 | ``` 21 | 22 | ### Delphi/C++ Builder 23 | Измените процедуру регистрации `RegisterDevice` а именно укажите свой сервер в строке 24 | ``` 25 | aHTTP.Get('http://ТУТ ВАШ СЕРВЕР/pushTest/api.php?method=saveToken&deviceID=' + FDeviceID + '&deviceToken=' + 26 | FDeviceToken + '&platform='{$IFDEF ANDROID} + 'ANDROID' {$ELSEIF defined(IOS)} + 'IOS' {$ENDIF}); 27 | ``` 28 | и также нужно указать идентификатор отправителя из консоли Firebase 29 | ``` 30 | const 31 | FAndroidServerKey = 'идентификатор отправителя'; 32 | ``` 33 | 34 | 35 | Google Play - https://play.google.com/store/apps/details?id=kz.rzaripov.PushTest&hl=ru 36 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Uncomment these types if you want even more clean repository. But be careful. 2 | # It can make harm to an existing project source. Read explanations below. 3 | # 4 | # Resource files are binaries containing manifest, project icon and version info. 5 | # They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files. 6 | #*.res 7 | # 8 | # Type library file (binary). In old Delphi versions it should be stored. 9 | # Since Delphi 2009 it is produced from .ridl file and can safely be ignored. 10 | #*.tlb 11 | # 12 | # Diagram Portfolio file. Used by the diagram editor up to Delphi 7. 13 | # Uncomment this if you are not using diagrams or use newer Delphi version. 14 | #*.ddp 15 | # 16 | # Visual LiveBindings file. Added in Delphi XE2. 17 | # Uncomment this if you are not using LiveBindings Designer. 18 | #*.vlb 19 | # 20 | # Deployment Manager configuration file for your project. Added in Delphi XE2. 21 | # Uncomment this if it is not mobile development and you do not use remote debug feature. 22 | #*.deployproj 23 | # 24 | # C++ object files produced when C/C++ Output file generation is configured. 25 | # Uncomment this if you are not using external objects (zlib library for example). 26 | #*.obj 27 | # 28 | 29 | # Delphi compiler-generated binaries (safe to delete) 30 | *.exe 31 | *.dll 32 | *.bpl 33 | *.bpi 34 | *.dcp 35 | *.so 36 | *.apk 37 | *.drc 38 | *.map 39 | *.dres 40 | *.rsm 41 | *.tds 42 | *.dcu 43 | *.lib 44 | *.a 45 | *.o 46 | *.ocx 47 | 48 | # Delphi autogenerated files (duplicated info) 49 | *.cfg 50 | *.hpp 51 | *Resource.rc 52 | 53 | # Delphi local files (user-specific info) 54 | *.local 55 | *.identcache 56 | *.projdata 57 | *.tvsconfig 58 | *.dsk 59 | 60 | # Delphi history and backups 61 | __history/ 62 | __recovery/ 63 | *.~* 64 | 65 | # Castalia statistics file (since XE7 Castalia is distributed with Delphi) 66 | *.stat 67 | -------------------------------------------------------------------------------- /uMain.fmx: -------------------------------------------------------------------------------- 1 | object FormMain: TFormMain 2 | Left = 0 3 | Top = 0 4 | ClientHeight = 480 5 | ClientWidth = 320 6 | Fill.Color = xFFEFEFEF 7 | Fill.Kind = Solid 8 | FormFactor.Width = 320 9 | FormFactor.Height = 480 10 | FormFactor.Devices = [Desktop] 11 | OnCreate = FormCreate 12 | DesignerMasterStyle = 3 13 | object rHeader: TRectangle 14 | Align = Top 15 | Fill.Color = xFF345B8A 16 | Sides = [] 17 | Size.Width = 320.000000000000000000 18 | Size.Height = 50.000000000000000000 19 | Size.PlatformDefault = False 20 | object lbTitle: TLabel 21 | Align = Client 22 | StyledSettings = [Family, Style] 23 | Size.Width = 320.000000000000000000 24 | Size.Height = 50.000000000000000000 25 | Size.PlatformDefault = False 26 | TextSettings.Font.Size = 22.000000000000000000 27 | TextSettings.FontColor = claWhite 28 | TextSettings.HorzAlign = Center 29 | TextSettings.WordWrap = False 30 | Text = 'PUSH Test' 31 | end 32 | end 33 | object Text1: TText 34 | Align = Top 35 | Margins.Top = 10.000000000000000000 36 | Position.Y = 60.000000000000000000 37 | Size.Width = 320.000000000000000000 38 | Size.Height = 48.000000000000000000 39 | Size.PlatformDefault = False 40 | Text = #1058#1086#1082#1077#1085' '#1091#1089#1090#1088#1086#1081#1089#1090#1074#1072 41 | TextSettings.Font.Size = 18.000000000000000000 42 | object sbShare: TSpeedButton 43 | Align = Right 44 | IconTintColor = claBlack 45 | Position.X = 272.000000000000000000 46 | Size.Width = 48.000000000000000000 47 | Size.Height = 48.000000000000000000 48 | Size.PlatformDefault = False 49 | StyleLookup = 'actiontoolbutton' 50 | Text = 'ShowShareSheetAction1' 51 | OnClick = sbShareClick 52 | end 53 | object SpeedButton1: TSpeedButton 54 | Align = Left 55 | IconTintColor = claBlack 56 | Size.Width = 48.000000000000000000 57 | Size.Height = 48.000000000000000000 58 | Size.PlatformDefault = False 59 | StyleLookup = 'refreshtoolbutton' 60 | Text = 'SpeedButton1' 61 | OnClick = SpeedButton1Click 62 | end 63 | end 64 | object tToken: TText 65 | Align = Top 66 | AutoSize = True 67 | Position.Y = 108.000000000000000000 68 | Size.Width = 320.000000000000000000 69 | Size.Height = 50.000000000000000000 70 | Size.PlatformDefault = False 71 | end 72 | object ActionList1: TActionList 73 | Left = 104 74 | Top = 224 75 | object ShowShareSheetAction1: TShowShareSheetAction 76 | Category = 'Media Library' 77 | end 78 | end 79 | end 80 | -------------------------------------------------------------------------------- /AndroidManifest.template.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | 11 | <%uses-permission%> 12 | 14 | 16 | 17 | 18 | 19 | 27 | 28 | <%application-meta-data%> 29 | <%services%> 30 | 32 | 36 | 37 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | <%activity%> 55 | <%receivers%> 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /pushTest/push.php: -------------------------------------------------------------------------------- 1 | $appName, 'sandbox' => false, 19 | 'apns_tokens' => $token_arr); 20 | 21 | $ch = curl_init(); 22 | curl_setopt_array($ch, array( 23 | CURLOPT_URL => $url, 24 | CURLOPT_POST => true, 25 | CURLOPT_HTTPHEADER => $headers, 26 | CURLOPT_RETURNTRANSFER => true, 27 | CURLOPT_SSL_VERIFYHOST => 0, 28 | CURLOPT_SSL_VERIFYPEER => false, 29 | CURLOPT_POSTFIELDS => json_encode($fields) 30 | )); 31 | $result = curl_exec($ch); 32 | curl_close($ch); 33 | if ($result === false) return false; 34 | 35 | $json = json_decode($result, true); 36 | $rows = []; 37 | for ($n = 0; $n < count($json['results']); $n++){ 38 | if ($json['results'][$n]['status'] == "OK") 39 | $rows[$n] = $json['results'][$n]['registration_token']; 40 | } 41 | return $rows; 42 | } 43 | 44 | function pushSend($title, $text, $tokens, $server_key) { 45 | $url = 'https://fcm.googleapis.com/fcm/send'; 46 | $headers = array('Authorization: key=' . $server_key, 47 | 'Content-Type: application/json'); 48 | 49 | if (is_array($tokens)) 50 | $fields['registration_ids'] = $tokens; 51 | else 52 | $fields['registration_ids'] = array($tokens); 53 | 54 | $fields['priority'] = 'high'; 55 | $fields['notification'] = array('body' => $text, 'title' => $title, 'sound' => 'default'); 56 | $fields['data'] = array('message' => $text, 'title' => $title); 57 | 58 | $ch = curl_init(); 59 | curl_setopt_array($ch, array( 60 | CURLOPT_URL => $url, 61 | CURLOPT_POST => true, 62 | CURLOPT_HTTPHEADER => $headers, 63 | CURLOPT_RETURNTRANSFER => true, 64 | CURLOPT_SSL_VERIFYHOST => 0, 65 | CURLOPT_SSL_VERIFYPEER => false, 66 | CURLOPT_POSTFIELDS => json_encode($fields) 67 | )); 68 | $result = curl_exec($ch); 69 | curl_close($ch); 70 | 71 | if ($result === false) return false; 72 | $json = json_decode($result, true); 73 | 74 | if ($json['success'] == 0) 75 | return false; 76 | else 77 | return true; 78 | } 79 | 80 | function pushSendOver1000($title, $text, $tokens, $server_key) { 81 | $GlobalResult = true; 82 | $PacketResult = false; 83 | $Count_Success = 0; 84 | $DeviceCountMax = 1000; 85 | $DeviceCountIndex = 0; 86 | $DevicesTokenPacketArray = array(); 87 | while ($DeviceCountIndex<=count($tokens)) { 88 | $DevicesTokenPacketArray = array_slice($tokens, $DeviceCountIndex, $DeviceCountMax); 89 | $PacketResult = pushSend($title, $text, $DevicesTokenPacketArray, $server_key); 90 | if ($PacketResult != true) $GlobalResult = false; 91 | $DeviceCountIndex = $DeviceCountIndex + $DeviceCountMax; 92 | } 93 | return $GlobalResult; 94 | } 95 | 96 | ?> 97 | -------------------------------------------------------------------------------- /pushTest/api.php: -------------------------------------------------------------------------------- 1 | 0) { 68 | $tokens = apns2fcmToken($config['app']['name'], $tokens_I, $config['push']['server_key']); 69 | } 70 | 71 | # склеиваем массивы в единый для передачи в функцию pushSend 72 | $fcm_tokens = array_merge($tokens_A, $tokens); 73 | #print_r($fcm_tokens); //- проверить можно так, что содержит массив 74 | 75 | # ВАЖНО! 76 | # За один раз можно отправить только на 1000 токенов, 77 | # поэтому если зарегистрированных девайсов у вас много, 78 | # нужно будет разделить на несколько этапов 79 | 80 | # отправляем пуши в FCM 81 | if (pushSendOver1000($title, $text, $fcm_tokens, $config['push']['server_key'] ) === false) 82 | msgErr("Пуши не отправлены"); 83 | else 84 | msgOK(); 85 | 86 | } else 87 | msgErr("Такой метод не найден"); 88 | 89 | ?> 90 | -------------------------------------------------------------------------------- /uMain.pas: -------------------------------------------------------------------------------- 1 | unit uMain; 2 | 3 | { 4 | author: ZuBy 5 | 6 | https://github.com/rzaripov1990/PUSHTestFCM 7 | 8 | 2017 9 | } 10 | 11 | interface 12 | 13 | uses 14 | System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, 15 | FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, 16 | FMX.StdCtrls, FMX.Objects, System.Actions, FMX.ActnList, FMX.StdActns, FMX.MediaLibrary.Actions, 17 | System.JSON, 18 | System.Notification, 19 | System.PushNotification 20 | {$IFDEF ANDROID}, FMX.PushNotification.Android{$ENDIF} 21 | {$IFDEF IOS}, FMX.PushNotification.IOS{$ENDIF}; 22 | 23 | type 24 | TFormMain = class(TForm) 25 | rHeader: TRectangle; 26 | lbTitle: TLabel; 27 | Text1: TText; 28 | tToken: TText; 29 | sbShare: TSpeedButton; 30 | ActionList1: TActionList; 31 | ShowShareSheetAction1: TShowShareSheetAction; 32 | SpeedButton1: TSpeedButton; 33 | procedure sbShareClick(Sender: TObject); 34 | procedure FormCreate(Sender: TObject); 35 | procedure SpeedButton1Click(Sender: TObject); 36 | private 37 | FDeviceID: string; 38 | FDeviceToken: string; 39 | 40 | FPushService: TPushService; 41 | FPushServiceConnection: TPushServiceConnection; 42 | 43 | procedure OnReceiveNotificationEvent(Sender: TObject; const ANotification: TPushServiceNotification); 44 | procedure OnServiceConnectionChange(Sender: TObject; AChange: TPushService.TChanges); 45 | 46 | { Private declarations } 47 | procedure PushServiceRegister; 48 | 49 | procedure RegisterDevice; 50 | public 51 | { Public declarations } 52 | end; 53 | 54 | var 55 | FormMain: TFormMain; 56 | 57 | implementation 58 | 59 | {$R *.fmx} 60 | 61 | uses 62 | System.Threading, System.Net.HTTPClient; 63 | 64 | const 65 | FAndroidServerKey = '63538920422'; 66 | 67 | procedure ClearAllNotification; 68 | var 69 | aNotificationCenter: TNotificationCenter; 70 | begin 71 | aNotificationCenter := TNotificationCenter.Create(nil); 72 | try 73 | if aNotificationCenter.Supported then 74 | begin 75 | aNotificationCenter.ApplicationIconBadgeNumber := -1; 76 | aNotificationCenter.CancelAll; 77 | end; 78 | finally 79 | aNotificationCenter.DisposeOf; 80 | aNotificationCenter := nil; 81 | end; 82 | end; 83 | 84 | procedure TFormMain.FormCreate(Sender: TObject); 85 | begin 86 | ClearAllNotification; 87 | PushServiceRegister; 88 | end; 89 | 90 | procedure TFormMain.OnReceiveNotificationEvent(Sender: TObject; const ANotification: TPushServiceNotification); 91 | const 92 | FCMSignature = 'gcm.notification.body'; 93 | GCMSignature = 'message'; 94 | APNsSignature = 'alert'; 95 | var 96 | aText: string; 97 | aObj: TJSONValue; 98 | begin 99 | // это событие срабатывает при открытом приложении 100 | {$IFDEF ANDROID} 101 | // устраняем ошибку с чтением текста уведомления, 102 | // если уведомление отправлено из консоли firebase 103 | // и не заполнены дополнительные поля (message, title) 104 | aObj := ANotification.DataObject.GetValue(GCMSignature); 105 | if aObj <> nil then 106 | aText := aObj.Value 107 | else 108 | aText := ANotification.DataObject.GetValue(FCMSignature).Value; 109 | {$ELSE} 110 | aObj := ANotification.DataObject.GetValue(APNsSignature); 111 | if aObj <> nil then 112 | aText := aObj.Value; 113 | {$ENDIF} 114 | ShowMessage(aText); 115 | end; 116 | 117 | procedure TFormMain.OnServiceConnectionChange(Sender: TObject; AChange: TPushService.TChanges); 118 | begin 119 | if (TPushService.TChange.DeviceToken in AChange) and Assigned(FPushServiceConnection) then 120 | begin 121 | FDeviceID := FPushService.DeviceIDValue[TPushService.TDeviceIDNames.DeviceID]; 122 | FDeviceToken := FPushService.DeviceTokenValue[TPushService.TDeviceTokenNames.DeviceToken]; 123 | 124 | // тут отправляем в хранилище токенов (на сервер с БД например) 125 | RegisterDevice; 126 | 127 | tToken.Text := FDeviceToken; 128 | end; 129 | end; 130 | 131 | procedure TFormMain.PushServiceRegister; 132 | begin 133 | FPushService := nil; 134 | FPushServiceConnection := nil; 135 | 136 | {$IF defined(ANDROID)} 137 | FPushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.GCM); 138 | FPushService.AppProps[TPushService.TAppPropNames.GCMAppID] := FAndroidServerKey; 139 | {$ENDIF} 140 | {$IF defined(IOS) AND defined(CPUARM)} 141 | FPushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.APS); 142 | {$ENDIF} 143 | if Assigned(FPushService) then 144 | begin 145 | FPushServiceConnection := TPushServiceConnection.Create(FPushService); 146 | FPushServiceConnection.OnChange := OnServiceConnectionChange; 147 | FPushServiceConnection.OnReceiveNotification := OnReceiveNotificationEvent; 148 | FPushServiceConnection.Active := true; 149 | 150 | FDeviceID := FPushService.DeviceIDValue[TPushService.TDeviceIDNames.DeviceID]; 151 | FDeviceToken := FPushService.DeviceTokenValue[TPushService.TDeviceTokenNames.DeviceToken]; 152 | 153 | // тут отправляем в хранилище токенов (на сервер с БД например) 154 | RegisterDevice; 155 | 156 | tToken.Text := FDeviceToken; 157 | end; 158 | end; 159 | 160 | procedure TFormMain.RegisterDevice; 161 | begin 162 | TTask.Run( 163 | procedure 164 | var 165 | aHTTP: THTTPClient; 166 | begin 167 | aHTTP := THTTPClient.Create; 168 | try 169 | aHTTP.Get('http://rzaripov.kz/pushTest/api.php?method=saveToken&deviceID=' + FDeviceID + '&deviceToken=' + 170 | FDeviceToken + '&platform='{$IFDEF ANDROID} + 'ANDROID' {$ELSEIF defined(IOS)} + 'IOS' {$ENDIF}); 171 | finally 172 | FreeAndNil(aHTTP); 173 | end; 174 | end); 175 | end; 176 | 177 | procedure TFormMain.sbShareClick(Sender: TObject); 178 | begin 179 | ShowShareSheetAction1.TextMessage := FDeviceToken; 180 | ShowShareSheetAction1.ExecuteTarget(sbShare); 181 | end; 182 | 183 | procedure TFormMain.SpeedButton1Click(Sender: TObject); 184 | begin 185 | tToken.Text := FDeviceToken; 186 | end; 187 | 188 | end. 189 | -------------------------------------------------------------------------------- /pushTest/common.php: -------------------------------------------------------------------------------- 1 | $p) { 101 | $out_pos = $p2; 102 | return substr($str, $p+strlen($tag1), $p2-$p-strlen($tag1)); 103 | } else { 104 | $out_pos = 0; 105 | return ""; 106 | } 107 | } 108 | 109 | function request($url) { 110 | # получаем страницу по url 111 | $myCurl = curl_init(); 112 | curl_setopt_array($myCurl, 113 | array( 114 | CURLOPT_URL => $url, 115 | CURLOPT_RETURNTRANSFER => true, 116 | CURLOPT_HEADER => false, 117 | ) 118 | ); 119 | 120 | $curl_resp = curl_exec($myCurl); 121 | $error = curl_errno($myCurl); 122 | 123 | if (!$error){ 124 | curl_close($myCurl); 125 | return $curl_resp; 126 | } else { 127 | curl_close($myCurl); 128 | msgErr(curl_error($myCurl)); 129 | } 130 | } 131 | 132 | function passGenerator($min = 6, $max = 9) { 133 | # генератор пароля 134 | $pass = ''; 135 | $chars = "1234567890qwertyuioplkjhgfdsazxcvbnmMNBVCXZASDFGHJKLPOIUYTREWQ"; 136 | $count_char_pass = rand($min, $max); 137 | for ($i = 0; $i < $count_char_pass; $i++) { 138 | $numberChar = rand(0, iconv_strlen($chars, 'UTF-8')-1); 139 | $pass .= $chars[$numberChar]; 140 | } 141 | return $pass; 142 | } 143 | 144 | function uniqueStr() { 145 | # генерируется уникальная строка, в md5 146 | # используется для сохранения имён картинок / url 147 | return md5(rand(1000,9999).time()); 148 | } 149 | 150 | // ** РАБОТАЕМ С MYSQL ******************************************************************** 151 | function getLastID() { 152 | # возвращает последний добавленный ID в базу 153 | global $db; # так указываются глобальные переменные 154 | if (!$db) 155 | return msgErr("Коннект к базе не выполнен"); 156 | else 157 | return mysqli_insert_id($db); 158 | } 159 | 160 | function selectQuery($sql) { 161 | # функция для SELECT запросов, возвращает массив данных 162 | global $db; # так указываются глобальные переменные 163 | if (!$db) 164 | return msgErr("Коннект к базе не выполнен"); 165 | else { 166 | $result = mysqli_query($db, $sql) or msgErr(mysqli_error($db)); 167 | $arr = array(); 168 | if (mysqli_num_rows($result) > 0) { 169 | while($r = mysqli_fetch_assoc($result)) { 170 | $arr[] = $r; 171 | } 172 | } 173 | return $arr; 174 | } 175 | } 176 | 177 | function queryComplete($sql) { 178 | # функция для UPDATE/INSERT запросов 179 | # используется когда нужно просто получить положительный ответ выполнения запроса 180 | # отправляется сразу клиенту 181 | global $db; # так указываются глобальные переменные 182 | if (!$db) 183 | return msgErr("Коннект к базе не выполнен"); 184 | else { 185 | $result = mysqli_query($db, $sql) or msgErr(mysqli_error($db)); 186 | if (mysqli_affected_rows($db) > 0) 187 | msgOK(); 188 | } 189 | } 190 | 191 | function queryResult($sql) { 192 | # функция для UPDATE/INSERT запросов 193 | # используется когда после запроса идут еще действия с проверкой IF () 194 | global $db; # так указываются глобальные переменные 195 | if (!$db) 196 | return msgErr("Коннект к базе не выполнен"); 197 | else { 198 | $result = mysqli_query($db, $sql) or msgErr(mysqli_error($db), true); 199 | if (mysqli_affected_rows($db) > 0) 200 | return true; 201 | else 202 | return false; 203 | } 204 | } -------------------------------------------------------------------------------- /PUSHTest.deployproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 5 | 6 | 7 | 066ab2310ac64b09 8 | 9 | 10 | iPhone5 11 | 12 | 13 | 14 | PUSHTest.app\ 15 | FM_ApplicationIcon_57x57.png 16 | iPhone_AppIcon57 17 | 0 18 | 19 | 20 | True 21 | 22 | 23 | PUSHTest.app\ 24 | FM_ApplicationIcon_180x180.png 25 | iPhone_AppIcon180 26 | 0 27 | 28 | 29 | True 30 | 31 | 32 | PUSHTest.app\ 33 | FM_SpotlightSearchIcon_80x80.png 34 | iPhone_Spotlight80 35 | 0 36 | 37 | 38 | True 39 | 40 | 41 | PUSHTest.app\ 42 | FM_SettingIcon_29x29.png 43 | iPad_Setting29 44 | 0 45 | 46 | 47 | True 48 | 49 | 50 | PUSHTest.app\ 51 | PUSHTest.armv7 52 | ProjectOutput_iOS32 53 | 0 54 | 55 | 56 | True 57 | 58 | 59 | PUSHTest.app\ 60 | Info.plist 61 | ProjectiOSInfoPList 62 | 1 63 | 64 | 65 | True 66 | 67 | 68 | PUSHTest.app\ 69 | FM_ApplicationIcon_114x114.png 70 | iPhone_AppIcon114 71 | 0 72 | 73 | 74 | True 75 | 76 | 77 | PUSHTest.app\ 78 | Default-Landscape@2x.png 79 | iPad_Launch2048 80 | 1 81 | 82 | 83 | True 84 | 85 | 86 | PUSHTest.app\ 87 | Default-736h@3x.png 88 | iPhone_Launch1242 89 | 0 90 | 91 | 92 | True 93 | 94 | 95 | PUSHTest.app\ 96 | PUSHTest 97 | ProjectOutput 98 | 1 99 | 100 | 101 | True 102 | True 103 | 104 | 105 | PUSHTest.app\ 106 | FM_ApplicationIcon_144x144.png 107 | iPad_AppIcon144 108 | 0 109 | 110 | 111 | True 112 | 113 | 114 | PUSHTest.app\ 115 | FM_SpotlightSearchIcon_40x40.png 116 | iPhone_Spotlight40 117 | 0 118 | 119 | 120 | True 121 | 122 | 123 | PUSHTest.app\ 124 | ResourceRules.plist 125 | ProjectiOSDeviceResourceRules 126 | 1 127 | 128 | 129 | True 130 | 131 | 132 | PUSHTest.app\ 133 | FM_SettingIcon_58x58.png 134 | iPad_Setting58 135 | 0 136 | 137 | 138 | True 139 | 140 | 141 | PUSHTest.app\ 142 | Default-Portrait@2x.png 143 | iPad_Launch1536 144 | 1 145 | 146 | 147 | True 148 | 149 | 150 | PUSHTest.app\ 151 | FM_ApplicationIcon_87x87.png 152 | iPhone_AppIcon87 153 | 0 154 | 155 | 156 | True 157 | 158 | 159 | PUSHTest.app\ 160 | Default~ipad.png 161 | iPad_Launch768 162 | 1 163 | 164 | 165 | True 166 | 167 | 168 | PUSHTest.app\ 169 | Default-Landscape@2x~ipad.png 170 | iPad_Launch2048x1536 171 | 0 172 | 173 | 174 | True 175 | 176 | 177 | PUSHTest.app\ 178 | Default-Landscape~ipad.png 179 | iPad_Launch1024x768 180 | 0 181 | 182 | 183 | True 184 | 185 | 186 | PUSHTest.app\ 187 | Default-Portrait~ipad.png 188 | iPad_Launch768x1024 189 | 0 190 | 191 | 192 | True 193 | 194 | 195 | PUSHTest.app\ 196 | FM_ApplicationIcon_60x60.png 197 | iPhone_AppIcon60 198 | 0 199 | 200 | 201 | True 202 | 203 | 204 | PUSHTest.app\..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF\ 205 | PUSHTest 206 | ProjectiOSDeviceDebug 207 | 1 208 | 209 | 210 | True 211 | 212 | 213 | PUSHTest.app\ 214 | FM_SpotlightSearchIcon_80x80.png 215 | iPad_SpotLight80 216 | 0 217 | 218 | 219 | True 220 | 221 | 222 | PUSHTest.app\ 223 | FM_ApplicationIcon_76x76.png 224 | iPad_AppIcon76 225 | 0 226 | 227 | 228 | True 229 | 230 | 231 | PUSHTest.app\ 232 | Default-568h@2x.png 233 | iPhone_Launch640x1136 234 | 1 235 | 236 | 237 | True 238 | 239 | 240 | PUSHTest.app\ 241 | FM_ApplicationIcon_120x120.png 242 | iPhone_AppIcon120 243 | 0 244 | 245 | 246 | True 247 | 248 | 249 | PUSHTest.app\ 250 | Default-Landscape.png 251 | iPad_Launch1024 252 | 1 253 | 254 | 255 | True 256 | 257 | 258 | PUSHTest.app\ 259 | FM_SpotlightSearchIcon_50x50.png 260 | iPad_SpotLight50 261 | 0 262 | 263 | 264 | True 265 | 266 | 267 | PUSHTest.app\ 268 | Default.png 269 | iPhone_Launch320 270 | 1 271 | 272 | 273 | True 274 | 275 | 276 | PUSHTest.app\ 277 | Default-667h@2x.png 278 | iPhone_Launch750 279 | 0 280 | 281 | 282 | True 283 | 284 | 285 | PUSHTest.app\ 286 | FM_ApplicationIcon_152x152.png 287 | iPad_AppIcon152 288 | 0 289 | 290 | 291 | True 292 | 293 | 294 | PUSHTest.app\ 295 | FM_ApplicationIcon_72x72.png 296 | iPad_AppIcon72 297 | 0 298 | 299 | 300 | True 301 | 302 | 303 | PUSHTest.app\ 304 | FM_SpotlightSearchIcon_29x29.png 305 | iPhone_Spotlight29 306 | 0 307 | 308 | 309 | True 310 | 311 | 312 | PUSHTest.app\ 313 | FM_SpotlightSearchIcon_40x40.png 314 | iPad_SpotLight40 315 | 0 316 | 317 | 318 | True 319 | 320 | 321 | PUSHTest.app\ 322 | FM_SpotlightSearchIcon_100x100.png 323 | iPad_SpotLight100 324 | 0 325 | 326 | 327 | True 328 | 329 | 330 | PUSHTest.app\ 331 | Default-Landscape-736h@3x.png 332 | iPhone_Launch2208 333 | 0 334 | 335 | 336 | True 337 | 338 | 339 | PUSHTest.app\ 340 | Default@2x.png 341 | iPhone_Launch640 342 | 1 343 | 344 | 345 | True 346 | 347 | 348 | PUSHTest.app\..\ 349 | PUSHTest.entitlements 350 | ProjectiOSEntitlements 351 | 1 352 | 353 | 354 | True 355 | 356 | 357 | PUSHTest.app\ 358 | FM_SpotlightSearchIcon_58x58.png 359 | iPhone_Spotlight58 360 | 0 361 | 362 | 363 | True 364 | 365 | 366 | PUSHTest.app\ 367 | Default-Portrait@2x~ipad.png 368 | iPad_Launch1536x2048 369 | 0 370 | 371 | 372 | True 373 | 374 | 375 | 376 | 377 | 378 | PUSHTest.app\ 379 | FM_SpotlightSearchIcon_50x50.png 380 | iPad_SpotLight50 381 | 0 382 | 383 | 384 | True 385 | 386 | 387 | PUSHTest.app\ 388 | Default-568h@2x.png 389 | iPhone_Launch640x1136 390 | 1 391 | 392 | 393 | True 394 | 395 | 396 | PUSHTest.app\ 397 | ResourceRules.plist 398 | ProjectiOSDeviceResourceRules 399 | 1 400 | 401 | 402 | True 403 | 404 | 405 | PUSHTest.app\ 406 | FM_ApplicationIcon_57x57.png 407 | iPhone_AppIcon57 408 | 0 409 | 410 | 411 | True 412 | 413 | 414 | PUSHTest.app\..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF\ 415 | PUSHTest 416 | ProjectiOSDeviceDebug 417 | 1 418 | 419 | 420 | True 421 | 422 | 423 | PUSHTest.app\ 424 | FM_SettingIcon_58x58.png 425 | iPad_Setting58 426 | 0 427 | 428 | 429 | True 430 | 431 | 432 | PUSHTest.app\..\ 433 | PUSHTest.entitlements 434 | ProjectiOSEntitlements 435 | 1 436 | 437 | 438 | True 439 | 440 | 441 | PUSHTest.app\ 442 | PUSHTest 443 | ProjectOutput 444 | 1 445 | 446 | 447 | True 448 | True 449 | 450 | 451 | PUSHTest.app\ 452 | FM_SpotlightSearchIcon_100x100.png 453 | iPad_SpotLight100 454 | 0 455 | 456 | 457 | True 458 | 459 | 460 | PUSHTest.app\ 461 | FM_SettingIcon_29x29.png 462 | iPad_Setting29 463 | 0 464 | 465 | 466 | True 467 | 468 | 469 | PUSHTest.app\ 470 | Default-Landscape.png 471 | iPad_Launch1024 472 | 1 473 | 474 | 475 | True 476 | 477 | 478 | PUSHTest.app\ 479 | Default-667h@2x.png 480 | iPhone_Launch750 481 | 0 482 | 483 | 484 | True 485 | 486 | 487 | PUSHTest.app\ 488 | FM_ApplicationIcon_76x76.png 489 | iPad_AppIcon76 490 | 0 491 | 492 | 493 | True 494 | 495 | 496 | PUSHTest.app\ 497 | FM_SpotlightSearchIcon_40x40.png 498 | iPad_SpotLight40 499 | 0 500 | 501 | 502 | True 503 | 504 | 505 | PUSHTest.app\ 506 | Info.plist 507 | ProjectiOSInfoPList 508 | 1 509 | 510 | 511 | True 512 | 513 | 514 | PUSHTest.app\ 515 | FM_ApplicationIcon_114x114.png 516 | iPhone_AppIcon114 517 | 0 518 | 519 | 520 | True 521 | 522 | 523 | PUSHTest.app\ 524 | FM_SpotlightSearchIcon_29x29.png 525 | iPhone_Spotlight29 526 | 0 527 | 528 | 529 | True 530 | 531 | 532 | PUSHTest.app\ 533 | FM_ApplicationIcon_60x60.png 534 | iPhone_AppIcon60 535 | 0 536 | 537 | 538 | True 539 | 540 | 541 | PUSHTest.app\ 542 | FM_ApplicationIcon_180x180.png 543 | iPhone_AppIcon180 544 | 0 545 | 546 | 547 | True 548 | 549 | 550 | PUSHTest.app\ 551 | Default@2x.png 552 | iPhone_Launch640 553 | 1 554 | 555 | 556 | True 557 | 558 | 559 | PUSHTest.app\ 560 | FM_SpotlightSearchIcon_40x40.png 561 | iPhone_Spotlight40 562 | 0 563 | 564 | 565 | True 566 | 567 | 568 | PUSHTest.app\ 569 | FM_SpotlightSearchIcon_80x80.png 570 | iPhone_Spotlight80 571 | 0 572 | 573 | 574 | True 575 | 576 | 577 | PUSHTest.app\ 578 | Default-736h@3x.png 579 | iPhone_Launch1242 580 | 0 581 | 582 | 583 | True 584 | 585 | 586 | PUSHTest.app\ 587 | FM_SpotlightSearchIcon_80x80.png 588 | iPad_SpotLight80 589 | 0 590 | 591 | 592 | True 593 | 594 | 595 | PUSHTest.app\ 596 | Default-Landscape~ipad.png 597 | iPad_Launch1024x768 598 | 0 599 | 600 | 601 | True 602 | 603 | 604 | PUSHTest.app\ 605 | FM_ApplicationIcon_152x152.png 606 | iPad_AppIcon152 607 | 0 608 | 609 | 610 | True 611 | 612 | 613 | PUSHTest.app\ 614 | Default-Portrait~ipad.png 615 | iPad_Launch768x1024 616 | 0 617 | 618 | 619 | True 620 | 621 | 622 | PUSHTest.app\ 623 | Default.png 624 | iPhone_Launch320 625 | 1 626 | 627 | 628 | True 629 | 630 | 631 | PUSHTest.app\ 632 | FM_ApplicationIcon_144x144.png 633 | iPad_AppIcon144 634 | 0 635 | 636 | 637 | True 638 | 639 | 640 | PUSHTest.app\ 641 | Default-Portrait@2x.png 642 | iPad_Launch1536 643 | 1 644 | 645 | 646 | True 647 | 648 | 649 | PUSHTest.app\ 650 | Default-Landscape-736h@3x.png 651 | iPhone_Launch2208 652 | 0 653 | 654 | 655 | True 656 | 657 | 658 | PUSHTest.app\ 659 | FM_ApplicationIcon_87x87.png 660 | iPhone_AppIcon87 661 | 0 662 | 663 | 664 | True 665 | 666 | 667 | PUSHTest.app\ 668 | Default-Landscape@2x~ipad.png 669 | iPad_Launch2048x1536 670 | 0 671 | 672 | 673 | True 674 | 675 | 676 | PUSHTest.app\ 677 | FM_SpotlightSearchIcon_58x58.png 678 | iPhone_Spotlight58 679 | 0 680 | 681 | 682 | True 683 | 684 | 685 | PUSHTest.app\ 686 | Default~ipad.png 687 | iPad_Launch768 688 | 1 689 | 690 | 691 | True 692 | 693 | 694 | PUSHTest.app\ 695 | FM_ApplicationIcon_120x120.png 696 | iPhone_AppIcon120 697 | 0 698 | 699 | 700 | True 701 | 702 | 703 | PUSHTest.app\ 704 | Default-Landscape@2x.png 705 | iPad_Launch2048 706 | 1 707 | 708 | 709 | True 710 | 711 | 712 | PUSHTest.app\ 713 | FM_ApplicationIcon_72x72.png 714 | iPad_AppIcon72 715 | 0 716 | 717 | 718 | True 719 | 720 | 721 | PUSHTest.app\ 722 | Default-Portrait@2x~ipad.png 723 | iPad_Launch1536x2048 724 | 0 725 | 726 | 727 | True 728 | 729 | 730 | 731 | 732 | PUSHTest\ 733 | PUSHTest.exe 734 | ProjectOutput 735 | 0 736 | 737 | 738 | True 739 | True 740 | 741 | 742 | 743 | 744 | PUSHTest.app\Contents\MacOS\ 745 | libcgsqlite3.dylib 746 | DependencyModule 747 | 1 748 | 749 | 750 | True 751 | 752 | 753 | PUSHTest.app\Contents\MacOS\ 754 | libcgunwind.1.0.dylib 755 | DependencyModule 756 | 1 757 | 758 | 759 | True 760 | 761 | 762 | 763 | 764 | PUSHTest\library\lib\armeabi-v7a\ 765 | libPUSHTest.so 766 | ProjectOutput 767 | 1 768 | 769 | 770 | True 771 | True 772 | 773 | 774 | PUSHTest\res\drawable-small\ 775 | splash_image.png 776 | Android_SplashImage426 777 | 1 778 | 779 | 780 | True 781 | 782 | 783 | PUSHTest\library\lib\armeabi-v7a\ 784 | gdbserver 785 | AndroidGDBServer 786 | 1 787 | 788 | 789 | True 790 | 791 | 792 | PUSHTest\res\drawable\ 793 | splash_image_def.xml 794 | AndroidSplashImageDef 795 | 1 796 | 797 | 798 | True 799 | 800 | 801 | PUSHTest\res\drawable-normal\ 802 | splash_image.png 803 | Android_SplashImage470 804 | 1 805 | 806 | 807 | True 808 | 809 | 810 | PUSHTest\res\values\ 811 | styles.xml 812 | AndroidSplashStyles 813 | 1 814 | 815 | 816 | True 817 | 818 | 819 | PUSHTest\res\drawable-ldpi\ 820 | ic_launcher.png 821 | Android_LauncherIcon36 822 | 1 823 | 824 | 825 | True 826 | 827 | 828 | PUSHTest\res\drawable-mdpi\ 829 | ic_launcher.png 830 | Android_LauncherIcon48 831 | 1 832 | 833 | 834 | True 835 | 836 | 837 | PUSHTest\res\drawable-small\ 838 | splash_image.png 839 | Android_SplashImage426 840 | 1 841 | 842 | 843 | True 844 | 845 | 846 | PUSHTest\res\drawable-large\ 847 | splash_image.png 848 | Android_SplashImage640 849 | 1 850 | 851 | 852 | True 853 | 854 | 855 | PUSHTest\library\lib\armeabi\ 856 | libPUSHTest.so 857 | AndroidLibnativeArmeabiFile 858 | 1 859 | 860 | 861 | True 862 | 863 | 864 | PUSHTest\res\drawable-mdpi\ 865 | ic_launcher.png 866 | Android_LauncherIcon48 867 | 1 868 | 869 | 870 | True 871 | 872 | 873 | PUSHTest\classes\ 874 | classes.dex 875 | AndroidClassesDexFile 876 | 1 877 | 878 | 879 | True 880 | 881 | 882 | PUSHTest\res\values\ 883 | styles.xml 884 | AndroidSplashStyles 885 | 1 886 | 887 | 888 | True 889 | 890 | 891 | PUSHTest\res\drawable-xxhdpi\ 892 | ic_launcher.png 893 | Android_LauncherIcon144 894 | 1 895 | 896 | 897 | True 898 | 899 | 900 | PUSHTest\res\drawable-large\ 901 | splash_image.png 902 | Android_SplashImage640 903 | 1 904 | 905 | 906 | True 907 | 908 | 909 | PUSHTest\ 910 | AndroidManifest.xml 911 | ProjectAndroidManifest 912 | 1 913 | 914 | 915 | True 916 | 917 | 918 | PUSHTest\res\drawable-ldpi\ 919 | ic_launcher.png 920 | Android_LauncherIcon36 921 | 1 922 | 923 | 924 | True 925 | 926 | 927 | PUSHTest\res\drawable\ 928 | splash_image_def.xml 929 | AndroidSplashImageDef 930 | 1 931 | 932 | 933 | True 934 | 935 | 936 | PUSHTest\res\drawable-hdpi\ 937 | ic_launcher.png 938 | Android_LauncherIcon72 939 | 1 940 | 941 | 942 | True 943 | 944 | 945 | PUSHTest\library\lib\mips\ 946 | libPUSHTest.so 947 | AndroidLibnativeMipsFile 948 | 1 949 | 950 | 951 | True 952 | 953 | 954 | PUSHTest\ 955 | AndroidManifest.xml 956 | ProjectAndroidManifest 957 | 1 958 | 959 | 960 | True 961 | 962 | 963 | PUSHTest\library\lib\armeabi\ 964 | libPUSHTest.so 965 | AndroidLibnativeArmeabiFile 966 | 1 967 | 968 | 969 | True 970 | 971 | 972 | PUSHTest\res\drawable-xxhdpi\ 973 | ic_launcher.png 974 | Android_LauncherIcon144 975 | 1 976 | 977 | 978 | True 979 | 980 | 981 | PUSHTest\library\lib\mips\ 982 | libPUSHTest.so 983 | AndroidLibnativeMipsFile 984 | 1 985 | 986 | 987 | True 988 | 989 | 990 | PUSHTest\res\drawable-xhdpi\ 991 | ic_launcher.png 992 | Android_LauncherIcon96 993 | 1 994 | 995 | 996 | True 997 | 998 | 999 | PUSHTest\classes\ 1000 | classes.dex 1001 | AndroidClassesDexFile 1002 | 1 1003 | 1004 | 1005 | True 1006 | 1007 | 1008 | PUSHTest\res\drawable-xlarge\ 1009 | splash_image.png 1010 | Android_SplashImage960 1011 | 1 1012 | 1013 | 1014 | True 1015 | 1016 | 1017 | PUSHTest\res\drawable-xlarge\ 1018 | splash_image.png 1019 | Android_SplashImage960 1020 | 1 1021 | 1022 | 1023 | True 1024 | 1025 | 1026 | PUSHTest\res\drawable-hdpi\ 1027 | ic_launcher.png 1028 | Android_LauncherIcon72 1029 | 1 1030 | 1031 | 1032 | True 1033 | 1034 | 1035 | PUSHTest\library\lib\armeabi-v7a\ 1036 | gdbserver 1037 | AndroidGDBServer 1038 | 1 1039 | 1040 | 1041 | True 1042 | 1043 | 1044 | PUSHTest\res\drawable-xhdpi\ 1045 | ic_launcher.png 1046 | Android_LauncherIcon96 1047 | 1 1048 | 1049 | 1050 | True 1051 | 1052 | 1053 | PUSHTest\res\drawable-normal\ 1054 | splash_image.png 1055 | Android_SplashImage470 1056 | 1 1057 | 1058 | 1059 | True 1060 | 1061 | 1062 | PUSHTest\library\lib\armeabi-v7a\ 1063 | libPUSHTest.so 1064 | ProjectOutput 1065 | 1 1066 | 1067 | 1068 | True 1069 | True 1070 | 1071 | 1072 | 1073 | 1074 | PUSHTest.app\ 1075 | libcgunwind.1.0.dylib 1076 | DependencyModule 1077 | 1 1078 | 1079 | 1080 | True 1081 | 1082 | 1083 | PUSHTest.app\ 1084 | libPCRE.dylib 1085 | DependencyModule 1086 | 1 1087 | 1088 | 1089 | True 1090 | 1091 | 1092 | 1093 | -------------------------------------------------------------------------------- /PUSHTest.dproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | {19F53C9E-008E-493D-948A-EA39108CFB1F} 4 | 18.2 5 | FMX 6 | PUSHTest.dpr 7 | True 8 | Release 9 | Android 10 | 1119 11 | Application 12 | 13 | 14 | true 15 | 16 | 17 | true 18 | Base 19 | true 20 | 21 | 22 | true 23 | Base 24 | true 25 | 26 | 27 | true 28 | Base 29 | true 30 | 31 | 32 | true 33 | Base 34 | true 35 | 36 | 37 | true 38 | Base 39 | true 40 | 41 | 42 | true 43 | Base 44 | true 45 | 46 | 47 | true 48 | Base 49 | true 50 | 51 | 52 | true 53 | Base 54 | true 55 | 56 | 57 | true 58 | Cfg_1 59 | true 60 | true 61 | 62 | 63 | true 64 | Cfg_1 65 | true 66 | true 67 | 68 | 69 | true 70 | Cfg_1 71 | true 72 | true 73 | 74 | 75 | true 76 | Cfg_1 77 | true 78 | true 79 | 80 | 81 | true 82 | Base 83 | true 84 | 85 | 86 | true 87 | Cfg_2 88 | true 89 | true 90 | 91 | 92 | true 93 | Cfg_2 94 | true 95 | true 96 | 97 | 98 | true 99 | Cfg_2 100 | true 101 | true 102 | 103 | 104 | true 105 | Cfg_2 106 | true 107 | true 108 | 109 | 110 | true 111 | Cfg_2 112 | true 113 | true 114 | 115 | 116 | true 117 | true 118 | true 119 | System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) 120 | true 121 | true 122 | $(BDS)\bin\delphi_PROJECTICNS.icns 123 | true 124 | true 125 | true 126 | true 127 | true 128 | $(BDS)\bin\delphi_PROJECTICON.ico 129 | PUSHTest 130 | .\$(Platform)\$(Config) 131 | .\$(Platform)\$(Config) 132 | false 133 | false 134 | false 135 | false 136 | false 137 | 138 | 139 | android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar 140 | true 141 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png 142 | $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png 143 | DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;emsclientfiredac;DataSnapFireDAC;tethering;bindcompfmx;FmxTeeUI;FireDACIBDriver;fmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;emsclient;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;LockBoxDR;inet;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;FMXTee;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;fgx;LockBox3DR;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) 144 | $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png 145 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png 146 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png 147 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png 148 | Debug 149 | package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= 150 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png 151 | $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png 152 | $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png 153 | 154 | 155 | CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera 156 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png 157 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png 158 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png 159 | true 160 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png 161 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png 162 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_640x960.png 163 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x748.png 164 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_320x480.png 165 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_72x72.png 166 | $(MSBuildProjectName) 167 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2008.png 168 | DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;emsclientfiredac;DataSnapFireDAC;tethering;bindcompfmx;FmxTeeUI;FireDACIBDriver;fmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;emsclient;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;LockBoxDR;inet;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;FMXTee;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;fgx;LockBox3DR;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;fmxase;$(DCC_UsePackage) 169 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png 170 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png 171 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_100x100.png 172 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png 173 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png 174 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_50x50.png 175 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png 176 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png 177 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_29x29.png 178 | Debug 179 | $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png 180 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png 181 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png 182 | $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_29x29.png 183 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_640x1136.png 184 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png 185 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png 186 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_114x114.png 187 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png 188 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_144x144.png 189 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_57x57.png 190 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1496.png 191 | iPhoneAndiPad 192 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png 193 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1004.png 194 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_58x58.png 195 | 196 | 197 | CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera 198 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png 199 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png 200 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png 201 | true 202 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png 203 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png 204 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_640x960.png 205 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x748.png 206 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_320x480.png 207 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_72x72.png 208 | $(MSBuildProjectName) 209 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2008.png 210 | DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;emsclientfiredac;DataSnapFireDAC;tethering;bindcompfmx;TMSFMXWebGMapsPkgDXE10;FmxTeeUI;FireDACIBDriver;fmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;emsclient;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;LockBoxDR;inet;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;FMXTee;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;LockBox3DR;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;fmxase;$(DCC_UsePackage) 211 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png 212 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png 213 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_100x100.png 214 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png 215 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png 216 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_50x50.png 217 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png 218 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png 219 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_29x29.png 220 | Debug 221 | $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png 222 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png 223 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png 224 | $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_29x29.png 225 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_640x1136.png 226 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png 227 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png 228 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_114x114.png 229 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png 230 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_144x144.png 231 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_57x57.png 232 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1496.png 233 | iPhoneAndiPad 234 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png 235 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1004.png 236 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_58x58.png 237 | 238 | 239 | CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera 240 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png 241 | true 242 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png 243 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x748.png 244 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png 245 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png 246 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_320x480.png 247 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_640x960.png 248 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png 249 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2008.png 250 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_72x72.png 251 | DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;emsclientfiredac;DataSnapFireDAC;tethering;bindcompfmx;FmxTeeUI;FireDACIBDriver;fmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;emsclient;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;LockBoxDR;inet;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;FMXTee;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;fgx;LockBox3DR;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;fmxase;$(DCC_UsePackage) 252 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png 253 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png 254 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png 255 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_100x100.png 256 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_50x50.png 257 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png 258 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png 259 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png 260 | $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png 261 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_29x29.png 262 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_640x1136.png 263 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png 264 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png 265 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png 266 | $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_29x29.png 267 | iPhoneAndiPad 268 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png 269 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png 270 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_144x144.png 271 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_57x57.png 272 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_114x114.png 273 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png 274 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1496.png 275 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1004.png 276 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_58x58.png 277 | 278 | 279 | true 280 | DBXSqliteDriver;RESTComponents;DataSnapServerMidas;DBXInterBaseDriver;emsclientfiredac;DataSnapFireDAC;tethering;FireDACMSSQLDriver;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;FireDACIBDriver;fmx;fmxdae;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;emsclient;FireDACCommon;RESTBackendComponents;soapserver;bindengine;DBXMySQLDriver;FireDACOracleDriver;CloudService;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;LockBoxDR;inet;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;FireDACDSDriver;rtl;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;bindcomp;fgx;DBXInformixDriver;LockBox3DR;IndyIPClient;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage) 281 | Debug 282 | CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts 283 | 284 | 285 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png 286 | $(BDS)\bin\default_app.manifest 287 | DBXSqliteDriver;RESTComponents;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;emsclientfiredac;DataSnapFireDAC;svnui;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;DBXOracleDriver;inetdb;TMSFMXWebGMapsPkgDXE10;FmxTeeUI;emsedge;FireDACIBDriver;fmx;fmxdae;frx24;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;emsclient;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;CloudService;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;LockBoxDR;inet;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;Tee;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;DbxClientDriver;DBXSybaseASADriver;frxTee24;CustomIPTransport;vcldsnap;bindcomp;appanalytics;fgx;DBXInformixDriver;pkgMaterialEdit;LockBox3DR;IndyIPClient;bindcompvcl;TeeUI;frxe24;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;frxDB24;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage) 288 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png 289 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) 290 | 1033 291 | Debug 292 | true 293 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= 294 | 295 | 296 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png 297 | $(BDS)\bin\default_app.manifest 298 | DBXSqliteDriver;RESTComponents;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;emsclientfiredac;DataSnapFireDAC;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;FireDACIBDriver;fmx;fmxdae;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;emsclient;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;CloudService;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;LockBoxDR;inet;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;Tee;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;fgx;DBXInformixDriver;LockBox3DR;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage) 299 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png 300 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) 301 | 1033 302 | Debug 303 | true 304 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= 305 | 306 | 307 | DEBUG;$(DCC_Define) 308 | true 309 | false 310 | true 311 | true 312 | true 313 | 314 | 315 | false 316 | false 317 | false 318 | false 319 | 1 320 | false 321 | false 322 | false 323 | true 324 | false 325 | 326 | 327 | $(MSBuildProjectName) 328 | iPhoneAndiPad 329 | true 330 | 331 | 332 | true 333 | 1033 334 | true 335 | true 336 | false 337 | 338 | 339 | true 340 | true 341 | 342 | 343 | false 344 | RELEASE;$(DCC_Define) 345 | 0 346 | 0 347 | 348 | 349 | false 350 | false 351 | false 352 | false 353 | 1 354 | false 355 | false 356 | false 357 | true 358 | false 359 | 360 | 361 | iPhoneAndiPad 362 | com.embarcadero.$(ModuleName) 363 | iPhone Developer: Zair Ashirov (SJTTP9ST3S) 364 | False 365 | 77fb7980-68a7-413c-820c-d052ebe5dd56 366 | False 367 | true 368 | CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=com.embarcadero.$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=KVRWFQ9L67;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=true;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera 369 | 370 | 371 | iPhone Developer: Zair Ashirov (SJTTP9ST3S) 372 | False 373 | 77fb7980-68a7-413c-820c-d052ebe5dd56 374 | False 375 | true 376 | iPhoneAndiPad 377 | com.embarcadero.$(ModuleName) 378 | CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=com.embarcadero.$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=KVRWFQ9L67;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=true;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera 379 | true 380 | 381 | 382 | true 383 | true 384 | 385 | 386 | true 387 | true 388 | 389 | 390 | 391 | MainSource 392 | 393 | 394 |
FormMain
395 | fmx 396 |
397 | 398 | Cfg_2 399 | Base 400 | 401 | 402 | Base 403 | 404 | 405 | Cfg_1 406 | Base 407 | 408 |
409 | 410 | Delphi.Personality.12 411 | Application 412 | 413 | 414 | 415 | PUSHTest.dpr 416 | 417 | 418 | TMS FMX WebGMaps Designtime 419 | Microsoft Office 2000 Sample Automation Server Wrapper Components 420 | Microsoft Office XP Sample Automation Server Wrapper Components 421 | 422 | 423 | 424 | 425 | 426 | true 427 | 428 | 429 | 430 | 431 | libPUSHTest.so 432 | true 433 | 434 | 435 | 436 | 437 | Default-568h@2x.png 438 | true 439 | 440 | 441 | 442 | 443 | true 444 | 445 | 446 | 447 | 448 | true 449 | 450 | 451 | 452 | 453 | splash_image.png 454 | true 455 | 456 | 457 | 458 | 459 | ResourceRules.plist 460 | true 461 | 462 | 463 | 464 | 465 | true 466 | 467 | 468 | 469 | 470 | PUSHTest 471 | true 472 | 473 | 474 | 475 | 476 | true 477 | 478 | 479 | 480 | 481 | true 482 | 483 | 484 | 485 | 486 | true 487 | 488 | 489 | 490 | 491 | PUSHTest 492 | true 493 | 494 | 495 | 496 | 497 | true 498 | 499 | 500 | 501 | 502 | true 503 | 504 | 505 | 506 | 507 | true 508 | 509 | 510 | 511 | 512 | true 513 | 514 | 515 | 516 | 517 | true 518 | 519 | 520 | 521 | 522 | true 523 | 524 | 525 | 526 | 527 | PUSHTest.armv7 528 | true 529 | 530 | 531 | 532 | 533 | Info.plist 534 | true 535 | 536 | 537 | 538 | 539 | true 540 | 541 | 542 | 543 | 544 | true 545 | 546 | 547 | 548 | 549 | Default-Landscape@2x.png 550 | true 551 | 552 | 553 | 554 | 555 | Default-Landscape.png 556 | true 557 | 558 | 559 | 560 | 561 | PUSHTest 562 | true 563 | 564 | 565 | 566 | 567 | true 568 | 569 | 570 | 571 | 572 | true 573 | 574 | 575 | 576 | 577 | true 578 | 579 | 580 | 581 | 582 | Default-736h@3x.png 583 | true 584 | 585 | 586 | 587 | 588 | Default-667h@2x.png 589 | true 590 | 591 | 592 | 593 | 594 | true 595 | 596 | 597 | 598 | 599 | Info.plist 600 | true 601 | 602 | 603 | 604 | 605 | splash_image.png 606 | true 607 | 608 | 609 | 610 | 611 | true 612 | 613 | 614 | 615 | 616 | ResourceRules.plist 617 | true 618 | 619 | 620 | 621 | 622 | true 623 | 624 | 625 | 626 | 627 | true 628 | 629 | 630 | 631 | 632 | ic_launcher.png 633 | true 634 | 635 | 636 | 637 | 638 | true 639 | 640 | 641 | 642 | 643 | true 644 | 645 | 646 | 647 | 648 | Default-Portrait@2x.png 649 | true 650 | 651 | 652 | 653 | 654 | classes.dex 655 | true 656 | 657 | 658 | 659 | 660 | true 661 | 662 | 663 | 664 | 665 | Default@2x.png 666 | true 667 | 668 | 669 | 670 | 671 | true 672 | 673 | 674 | 675 | 676 | Default~ipad.png 677 | true 678 | 679 | 680 | 681 | 682 | Default-Landscape@2x~ipad.png 683 | true 684 | 685 | 686 | 687 | 688 | Default-Landscape~ipad.png 689 | true 690 | 691 | 692 | 693 | 694 | Default-Portrait~ipad.png 695 | true 696 | 697 | 698 | 699 | 700 | true 701 | 702 | 703 | 704 | 705 | PUSHTest 706 | true 707 | 708 | 709 | 710 | 711 | true 712 | 713 | 714 | 715 | 716 | ic_launcher.png 717 | true 718 | 719 | 720 | 721 | 722 | true 723 | 724 | 725 | 726 | 727 | true 728 | 729 | 730 | 731 | 732 | true 733 | 734 | 735 | 736 | 737 | Default-736h@3x.png 738 | true 739 | 740 | 741 | 742 | 743 | ic_launcher.png 744 | true 745 | 746 | 747 | 748 | 749 | true 750 | 751 | 752 | 753 | 754 | Default-Landscape~ipad.png 755 | true 756 | 757 | 758 | 759 | 760 | Default-568h@2x.png 761 | true 762 | 763 | 764 | 765 | 766 | true 767 | 768 | 769 | 770 | 771 | Default-Landscape.png 772 | true 773 | 774 | 775 | 776 | 777 | libPUSHTest.so 778 | true 779 | 780 | 781 | 782 | 783 | true 784 | 785 | 786 | 787 | 788 | true 789 | 790 | 791 | 792 | 793 | Default-Portrait~ipad.png 794 | true 795 | 796 | 797 | 798 | 799 | Default.png 800 | true 801 | 802 | 803 | 804 | 805 | Default.png 806 | true 807 | 808 | 809 | 810 | 811 | true 812 | 813 | 814 | 815 | 816 | true 817 | 818 | 819 | 820 | 821 | libPUSHTest.so 822 | true 823 | 824 | 825 | 826 | 827 | ic_launcher.png 828 | true 829 | 830 | 831 | 832 | 833 | Default-Portrait@2x.png 834 | true 835 | 836 | 837 | 838 | 839 | ic_launcher.png 840 | true 841 | 842 | 843 | 844 | 845 | Default-Landscape-736h@3x.png 846 | true 847 | 848 | 849 | 850 | 851 | Default-667h@2x.png 852 | true 853 | 854 | 855 | 856 | 857 | true 858 | 859 | 860 | 861 | 862 | true 863 | 864 | 865 | 866 | 867 | true 868 | 869 | 870 | 871 | 872 | Default-Landscape@2x~ipad.png 873 | true 874 | 875 | 876 | 877 | 878 | true 879 | 880 | 881 | 882 | 883 | splash_image.png 884 | true 885 | 886 | 887 | 888 | 889 | PUSHTest.exe 890 | true 891 | 892 | 893 | 894 | 895 | Default~ipad.png 896 | true 897 | 898 | 899 | 900 | 901 | true 902 | 903 | 904 | 905 | 906 | true 907 | 908 | 909 | 910 | 911 | true 912 | 913 | 914 | 915 | 916 | true 917 | 918 | 919 | 920 | 921 | true 922 | 923 | 924 | 925 | 926 | true 927 | 928 | 929 | 930 | 931 | Default-Landscape-736h@3x.png 932 | true 933 | 934 | 935 | 936 | 937 | splash_image.png 938 | true 939 | 940 | 941 | 942 | 943 | Default@2x.png 944 | true 945 | 946 | 947 | 948 | 949 | Default-Landscape@2x.png 950 | true 951 | 952 | 953 | 954 | 955 | true 956 | 957 | 958 | 959 | 960 | true 961 | 962 | 963 | 964 | 965 | true 966 | 967 | 968 | 969 | 970 | Default-Portrait@2x~ipad.png 971 | true 972 | 973 | 974 | 975 | 976 | Default-Portrait@2x~ipad.png 977 | true 978 | 979 | 980 | 981 | 982 | 1 983 | 984 | 985 | 1 986 | 987 | 988 | 989 | 990 | Contents\Resources 991 | 1 992 | 993 | 994 | 995 | 996 | classes 997 | 1 998 | 999 | 1000 | 1001 | 1002 | Contents\MacOS 1003 | 0 1004 | 1005 | 1006 | 1 1007 | 1008 | 1009 | Contents\MacOS 1010 | 1 1011 | 1012 | 1013 | 1014 | 1015 | 1 1016 | 1017 | 1018 | 1 1019 | 1020 | 1021 | 1 1022 | 1023 | 1024 | 1025 | 1026 | res\drawable-xxhdpi 1027 | 1 1028 | 1029 | 1030 | 1031 | 1032 | library\lib\mips 1033 | 1 1034 | 1035 | 1036 | 1037 | 1038 | 1 1039 | 1040 | 1041 | 1 1042 | 1043 | 1044 | 0 1045 | 1046 | 1047 | 1 1048 | 1049 | 1050 | Contents\MacOS 1051 | 1 1052 | 1053 | 1054 | library\lib\armeabi-v7a 1055 | 1 1056 | 1057 | 1058 | 1 1059 | 1060 | 1061 | 1062 | 1063 | 0 1064 | 1065 | 1066 | Contents\MacOS 1067 | 1 1068 | .framework 1069 | 1070 | 1071 | 1072 | 1073 | 1 1074 | 1075 | 1076 | 1 1077 | 1078 | 1079 | 1080 | 1081 | 1 1082 | 1083 | 1084 | 1 1085 | 1086 | 1087 | 1 1088 | 1089 | 1090 | 1091 | 1092 | 1 1093 | 1094 | 1095 | 1 1096 | 1097 | 1098 | 1 1099 | 1100 | 1101 | 1102 | 1103 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 1104 | 1 1105 | 1106 | 1107 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 1108 | 1 1109 | 1110 | 1111 | 1112 | 1113 | 1 1114 | 1115 | 1116 | 1 1117 | 1118 | 1119 | 1 1120 | 1121 | 1122 | 1123 | 1124 | 1 1125 | 1126 | 1127 | 1 1128 | 1129 | 1130 | 1 1131 | 1132 | 1133 | 1134 | 1135 | library\lib\armeabi 1136 | 1 1137 | 1138 | 1139 | 1140 | 1141 | 0 1142 | 1143 | 1144 | 1 1145 | 1146 | 1147 | Contents\MacOS 1148 | 1 1149 | 1150 | 1151 | 1152 | 1153 | 1 1154 | 1155 | 1156 | 1 1157 | 1158 | 1159 | 1 1160 | 1161 | 1162 | 1163 | 1164 | res\drawable-normal 1165 | 1 1166 | 1167 | 1168 | 1169 | 1170 | res\drawable-xhdpi 1171 | 1 1172 | 1173 | 1174 | 1175 | 1176 | res\drawable-large 1177 | 1 1178 | 1179 | 1180 | 1181 | 1182 | 1 1183 | 1184 | 1185 | 1 1186 | 1187 | 1188 | 1 1189 | 1190 | 1191 | 1192 | 1193 | Assets 1194 | 1 1195 | 1196 | 1197 | Assets 1198 | 1 1199 | 1200 | 1201 | 1202 | 1203 | ..\ 1204 | 1 1205 | 1206 | 1207 | ..\ 1208 | 1 1209 | 1210 | 1211 | 1212 | 1213 | res\drawable-hdpi 1214 | 1 1215 | 1216 | 1217 | 1218 | 1219 | library\lib\armeabi-v7a 1220 | 1 1221 | 1222 | 1223 | 1224 | 1225 | Contents 1226 | 1 1227 | 1228 | 1229 | 1230 | 1231 | ..\ 1232 | 1 1233 | 1234 | 1235 | 1236 | 1237 | Assets 1238 | 1 1239 | 1240 | 1241 | Assets 1242 | 1 1243 | 1244 | 1245 | 1246 | 1247 | 1 1248 | 1249 | 1250 | 1 1251 | 1252 | 1253 | 1 1254 | 1255 | 1256 | 1257 | 1258 | res\values 1259 | 1 1260 | 1261 | 1262 | 1263 | 1264 | res\drawable-small 1265 | 1 1266 | 1267 | 1268 | 1269 | 1270 | res\drawable 1271 | 1 1272 | 1273 | 1274 | 1275 | 1276 | 1 1277 | 1278 | 1279 | 1 1280 | 1281 | 1282 | 1 1283 | 1284 | 1285 | 1286 | 1287 | 1 1288 | 1289 | 1290 | 1291 | 1292 | res\drawable 1293 | 1 1294 | 1295 | 1296 | 1297 | 1298 | 0 1299 | 1300 | 1301 | 0 1302 | 1303 | 1304 | Contents\Resources\StartUp\ 1305 | 0 1306 | 1307 | 1308 | 0 1309 | 1310 | 1311 | 0 1312 | 1313 | 1314 | 0 1315 | 1316 | 1317 | 1318 | 1319 | library\lib\armeabi-v7a 1320 | 1 1321 | 1322 | 1323 | 1324 | 1325 | 0 1326 | .bpl 1327 | 1328 | 1329 | 1 1330 | .dylib 1331 | 1332 | 1333 | Contents\MacOS 1334 | 1 1335 | .dylib 1336 | 1337 | 1338 | 1 1339 | .dylib 1340 | 1341 | 1342 | 1 1343 | .dylib 1344 | 1345 | 1346 | 1347 | 1348 | res\drawable-mdpi 1349 | 1 1350 | 1351 | 1352 | 1353 | 1354 | res\drawable-xlarge 1355 | 1 1356 | 1357 | 1358 | 1359 | 1360 | res\drawable-ldpi 1361 | 1 1362 | 1363 | 1364 | 1365 | 1366 | 0 1367 | .dll;.bpl 1368 | 1369 | 1370 | 1 1371 | .dylib 1372 | 1373 | 1374 | Contents\MacOS 1375 | 1 1376 | .dylib 1377 | 1378 | 1379 | 1 1380 | .dylib 1381 | 1382 | 1383 | 1 1384 | .dylib 1385 | 1386 | 1387 | 1388 | 1389 | 1390 | 1391 | 1392 | 1393 | 1394 | 1395 | 1396 | 1397 | True 1398 | True 1399 | True 1400 | True 1401 | True 1402 | True 1403 | True 1404 | 1405 | 1406 | 12 1407 | 1408 | 1409 | 1410 | 1411 |
1412 | --------------------------------------------------------------------------------