Перейти к содержанию
Denis Vasilyev

Серия статей, как настроить Android, OS X, iOS Simulator, iOS с RAD Studio (Delphi, C++ Builder)

Рекомендуемые сообщения

Серия статей с пошаговой инструкцией, как подключить и настроить Android, OS X, iOS Simulator, iOS для работы с RAD Studio.

 

Как настроить Android и RAD Studio XE7 (Delphi, C++ Builder)
http://habrahabr.ru/company/delphi/blog/253929/

7b9698932390b8c53965532348e5c9ec.jpg

 

Как настроить Mac OS X, iOS-симулятор и RAD Studio XE8 (Delphi, C++ Builder)
http://habrahabr.ru/company/delphi/blog/255721/

31af92d369d067687a35de3b6c7d8221.jpg

 

Как настроить iOS-устройство и RAD Studio XE8 (Delphi, C++ Builder)
http://habrahabr.ru/company/delphi/blog/265313/

76a7633aa217a0d26d378941ec4b9956.jpg

Поделиться сообщением


Ссылка на сообщение

Давно хотел обсудить качественно про установку...

Все что вы выложили(без обид) годиться судентам..да и то у них нифига не получиться ).

 

Опишу что действительно надо пиплам:

Ведро.

1. Установка делфи БЕЗ галочек дроида (профи все так делают). СДК и НДК надо качать отдельно по уму...

2. Описать каждое поле в настройках начиная от zipalign и ВСЕ и ИМЕННО ВСЕ строчки что они значат!!! Такого нигде нет...и многие

как котята слепые разрабатывают на авось.

 

Ну ведро куда нишло...а вот ИОС

ИОС.

1. Как ставить через вируалку (не фиг людям впаривать маки). У меня на виртуалке...

2. Как импортировать сертификаты через сайт, т.е. сначала там сгенерить...

и т.п.

 

вот это будет действ полезно.

Отредактировал rustam_d

Поделиться сообщением


Ссылка на сообщение

Вполне нормальное описание.

По iOS сделать можно ещё проще, указать в xCode учётную запись и все профили подтянуться автоматически и все сертификаты. Отдельно не придётся ничего качать, импортировать и пр.

 

На виртуалке всё это дело ни чем не отличается, все студии и MacOS установлены сугубо на виртуалках и всё отлично работает. Сейчас когда профили подтягиваются автоматически и в самой RAD студии, вообще стало просто.

 

А вот что стоило бы описать подробнее, так это именование BundleID и прочите тонкости в Коннекте Эпла, я первый раз когда делал, два дня убил. С этими обратными нотациями записи, профилями и пр.

Поделиться сообщением


Ссылка на сообщение

а както можно без наличия устройства iOS, вот это было б полезная статья если кто поделится опытом буду признателен

Поделиться сообщением


Ссылка на сообщение

 

Цитата

@rustam_d

1. Установка делфи БЕЗ галочек дроида (профи все так делают). СДК и НДК надо качать отдельно по уму...

 

 

Наоборот, профи советуют ставить рекомендуемые, протестированные версии SDK, те что идут по умолчанию с пакетом.

Note: You need to use the recommended versions of the Android development tools. RAD Studio might not support changes that alternative versions introduce.  

http://docwiki.embarcadero.com/RADStudio/Seattle/en/Installing_the_Android_Development_Tools

Хотите случайных багов, - все в ваших руках.

 

50 минут назад, tromani сказал:

а както можно без наличия устройства iOS, вот это было б полезная статья если кто поделится опытом буду признателен

Можно и без устройства, на симуляторе.

Все руководства уже расписаны: http://docwiki.embarcadero.com/RADStudio/Berlin/en/Mobile_Tutorial:_Set_Up_Your_Development_Environment_on_the_Mac_(iOS)

 

 

 

Отредактировал ENRGY

Поделиться сообщением


Ссылка на сообщение
В 23.03.2017 в 20:38, ENRGY сказал:

Можно и без устройства, на симуляторе.

Step 1: Install the Platform Assistant

The Platform Assistant must be running on the Mac

толи я безнадежно туп толи всетаки надо иметь устройство - работающий мак

Поделиться сообщением


Ссылка на сообщение

@tromani

Я имел ввиду без устройства iPhone - можно на симуляторе iOS. Но лучше где то взять реальный телефон или iPad.

Конечно нужен MacOS (OSX). Вся инфраструктура iOS программирования зависима от OSX и делается только через макос, независимо от языка.

Вы его можете поставить на VMWare (нужно его еще пропатчить, для macOS) - готовый образ vmware можно скачать на рутрекере. Там и все инструкции. Но для его запуска вам нужен Intel процессор, хотя там есть варианты и с AMD, но с ним больше проблем на маке.

Потом можно подключить реальный iPhone и он определиться в виртуалке.

 

Отредактировал ENRGY

Поделиться сообщением


Ссылка на сообщение

Уважаемые формучане. Решил опять поднять избитый вопрос о настройке под iOs.

И так у меня Delphi xe10.3 Rio + VMware MacOs High Sierra + Xcode 10.1 так есть developer аккаунт и живой iphone 6

Пробовал iOs Simulator приложение ставиться но не запускается. Видимо причина в разрядности системы или я не знаю. Но не запускаются даже приложения из коробки.

Компилирование под живое устройство вообще ничего не дает- компилируется говорит ок и все на устройстве реакции 0.

Вычитал что это возможно связано с Provisioning Profiles не пойму что с ним делать.

Если есть люди знающие подскажите в чем может быть проблема.

ДА и еще вопрос по сертификатам, не понимаю какой мне нужен серт для приложения там что-то много пунктов. (сказывается плохое знание английского).

Под андройд проблем таких не возникло.

В общем не пинайте я думаю что первый раз у многих возникали такие вопросы.

Отредактировал MrAnderson

Поделиться сообщением


Ссылка на сообщение

Нашел решение. Может кому-то пригодится если будет актуально.

1) Заходим в макось которая настроена к дельфину

2) Запускаем XCode

3) В таб баре вверху выбираем  Window > Devices and Simulators

4) В открывшемся окне выбираем Simulators далее в нижнем левом углу данного окна нажимаем "+"

5) Появляется вкладка, и заполняем. i. Даем название эмулятору (любое главное вам понять и на транслите). ii. Следущее окно, для какого устройства (я выбирал 6). iii. Выбираем версию IOS, если в списке ничего нет, то выбираем "Download more simulatior runtime..."

6) Далее выбираем версию эмулятора, скачиваем и устанавливаем.

из пункта 5 нажимаем сохранить.

7) в дельфине выбор платформы на iOS Simulator > Target обновляем список.

8) выбираем новый появившийся с вашим названием и радуемся жизни ?

Поделиться сообщением


Ссылка на сообщение
54 минуты назад, MVAPlayer сказал:

Нашел решение. Может кому-то пригодится если будет актуально.

1) Заходим в макось которая настроена к дельфину

2) Запускаем XCode

3) В таб баре вверху выбираем  Window > Devices and Simulators

4) В открывшемся окне выбираем Simulators далее в нижнем левом углу данного окна нажимаем "+"

5) Появляется вкладка, и заполняем. i. Даем название эмулятору (любое главное вам понять и на транслите). ii. Следущее окно, для какого устройства (я выбирал 6). iii. Выбираем версию IOS, если в списке ничего нет, то выбираем "Download more simulatior runtime..."

6) Далее выбираем версию эмулятора, скачиваем и устанавливаем.

из пункта 5 нажимаем сохранить.

7) в дельфине выбор платформы на iOS Simulator > Target обновляем список.

? выбираем новый появившийся с вашим названием и радуемся жизни ?

Версию ios  какую выбрали? В версии как раз и собака порылась))) 

Поделиться сообщением


Ссылка на сообщение
8 минут назад, MVAPlayer сказал:

я выбрал 10.3.1

он еще в списке пока есть

Уточните версию Xcode и Delphi 

Поделиться сообщением


Ссылка на сообщение
5 минут назад, MVAPlayer сказал:

Xcode 11.4.1

Delphi 10.3.3 CE

 Надо завтра посмотреть. Нет такой версии...

Поделиться сообщением


Ссылка на сообщение

Решил покодить на IOS

Купил 😅 Rad Studio 10.4.1
На том же сайте купил VMware + macOS Catalina 10.15.7 
На Маке поставил последний Xcode + PAServer последний

Пытаюсь запустить пустое приложение, но оно не запускается :(

trb_01.thumb.jpg.5dc3c062c20cb0abd1ce41cf5b5f11bf.jpg

trb_02.thumb.jpg.60562046caa1bd5566cdb4bc3e16ebdb.jpg

Чуется мне, что проблема в последнем Xcode. Верно ли моё предположение? А какой тогда нужно использовать?

trb_03.jpg.a6507c36545f2dcc6c0180b8ddefc747.jpg

 

 

Поделиться сообщением


Ссылка на сообщение
1 час назад, CyberStorm сказал:

Решил покодить на IOS

Купил 😅 Rad Studio 10.4.1
На том же сайте купил VMware + macOS Catalina 10.15.7 
На Маке поставил последний Xcode + PAServer последний

Пытаюсь запустить пустое приложение, но оно не запускается :(

trb_01.thumb.jpg.5dc3c062c20cb0abd1ce41cf5b5f11bf.jpg

trb_02.thumb.jpg.60562046caa1bd5566cdb4bc3e16ebdb.jpg

Чуется мне, что проблема в последнем Xcode. Верно ли моё предположение? А какой тогда нужно использовать?

trb_03.jpg.a6507c36545f2dcc6c0180b8ddefc747.jpg

 

 

Симулятор не работает, не в курсе,  (Я отлаживаю на живом устройстве) вроде не слышал, что его чинили. 

Поделиться сообщением


Ссылка на сообщение

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Похожий контент

    • От slav_z
      Все разработчики при работе с FMX рано или поздно сталкиваются с одной и той же проблемой: необходимо исключить "случайное" срабатывание нажатий элементов внутри скроллбокса во время его скроллинга. Идут годы, а решения так и нет. Давайте попробуем это исправить. Поехали!
      Запускаем IDE, создаем новый проект, кидаем на форму TVertScrollBox и на него чего-нибудь побольше... запускаем на мобильном устройстве, пытаемся скроллировать,

      получаем проблемы в виде срабатывания разных событий типа OnClick элементов.
      Решение состоит в том, чтобы сделать элементы "невидимыми" для событий связанных с действиями пользователя с экраном во время скроллинга.
      Делаем следующее:

      Все. Переносим код в базовую форму, делаем его более гибким, убираем все те костыли, которые мы уже успели сделать ранее...
      Удачи!
      https://github.com/slav-libx/scroll-click.git
    • От uakmal
      Здравствуйте!
      Создаю медиаплеер для Android TV. 
      Запускаю плеер, нажимаю на условную кнопку, которая делает следующее: 
      MediaPlayer1.FileName:='/storage/emulated/0/download/1.mp4'; После нажатия вылетает окошко с надписью:
      java.lang.java.lang.illegalargumentexception после закрытия окошки нажимаю на play, но ничего не происходит.
      Подскажите, пожалуйста как исправить это?
    • От Delpher-X
      Итак, я пробовал использовать компоненты AppTethering для передачи данных между VCL-приложением работающим под Windows и мобильным FMX-приложением и потерпел неудачу, так как выяснилось что потоки данных данные компоненты на деле не передают. И у меня возник вопрос: а нет ли каких других компонентов в современной Embarcadero Studio, которые бы позволяли передавать как строковые данные, так и файлы между приложениями? Особенно меня интересуют все же файлы. 
    • От Delpher-X
      Доброе время суток. У меня есть код, который отправляет данные, в частности файлы, из одного приложения в другое, используя технологию AppTethering. Вот код, который отправляет данные: 
      var ImageToStream : TMemoryStream; begin ImageToStream := TMemoryStream.Create; ImageToStream.LoadFromFile('Здесь находится путь к файлу'); ImageToStream.Position := 0; TetheringAppProfile1.Resources.FindByName('ImageTransfer').Value := ImageToStream; ImageToStream.Free; end; А вот который принимает: 
      procedure TForm1.TetheringAppProfile1Resources3ResourceReceived( const Sender: TObject; const AResource: TRemoteResource); var GetImage : TMemoryStream; begin GetImage := TMemoryStream.Create; GetImage.Position := 0; GetImage.LoadFromStream(AResource.Value.AsStream); ImageViewer1.Bitmap.LoadFromStream(GetImage); GetImage.Free; end; Пока передача данных идет между двумя Windows-приложениями, все работает прекрасно. Однако, когда я пытаюсь отправить данные от Windows-приложения в Android-приложение, которое исполняется на смартфоне, подключенном к компьютеру через USB-шнур, данные не проходят.  
    • От Delpher-X
      Здравствуйте. У меня такая проблема. 
      Пытаюсь скачать файл:
       
      var S : TMemoryStream; begin S := TMemoryStream.Create(); IdHTTP1.Get('http://sitename.com/7UlmBU7IXHA.jpg', S); S.SaveToFile('/storage/emulated/0/ImageFile.jpg'); S.Free; end;
      Проблема возникает на последней стадии - при сохранении файла. Android пишет, Cannot create file: '/storage/emulated/0/ImageFile.jpg'. Permission denied, то есть доступ запрещен. Но как его разрешить? Когда я устанавливаю приложение, система пишет, что никаких разрешений данная программа не требует.
    • От Delpher-X
      Здравствуйте. Как указываются пути к каталогам и файлам в Android? Скажем, в Windows я указываю такой путь:  C:/Windows/Folder, а как это делается в Android? Особенно меня интересует, как обратиться к корневому каталогу, для создания там новой папки или файла, в Windows это C:/, или D:/ а тут как? 
    • От destroyer86
      Всем привет, с помощью Java2Op сделал обертку библиотеки получил модуль с интерфейсами.
      Теперь сам вопрос в JavaInterfaces.pas есть описание:
       
      JUsbManagerClass = interface(JObjectClass) ['{1048A6E9-E1B5-4DA5-A168-ED91E8DE5284}'] {class} function _GetACTION_USB_ACCESSORY_ATTACHED: JString; cdecl; {class} function _GetACTION_USB_ACCESSORY_DETACHED: JString; cdecl; {class} function _GetACTION_USB_DEVICE_ATTACHED: JString; cdecl; {class} function _GetACTION_USB_DEVICE_DETACHED: JString; cdecl; {class} function _GetEXTRA_ACCESSORY: JString; cdecl; {class} function _GetEXTRA_DEVICE: JString; cdecl; {class} function _GetEXTRA_PERMISSION_GRANTED: JString; cdecl; {class} function getAccessoryList: TJavaObjectArray<JUsbAccessory>; cdecl;//Deprecated {class} function openAccessory(accessory: JUsbAccessory): JParcelFileDescriptor; cdecl;//Deprecated {class} function openDevice(device: JUsbDevice): JUsbDeviceConnection; cdecl;//Deprecated {class} procedure requestPermission(device: JUsbDevice; pi: JPendingIntent); cdecl; overload;//Deprecated {class} property ACTION_USB_ACCESSORY_ATTACHED: JString read _GetACTION_USB_ACCESSORY_ATTACHED; {class} property ACTION_USB_ACCESSORY_DETACHED: JString read _GetACTION_USB_ACCESSORY_DETACHED; {class} property ACTION_USB_DEVICE_ATTACHED: JString read _GetACTION_USB_DEVICE_ATTACHED; {class} property ACTION_USB_DEVICE_DETACHED: JString read _GetACTION_USB_DEVICE_DETACHED; {class} property EXTRA_ACCESSORY: JString read _GetEXTRA_ACCESSORY; {class} property EXTRA_DEVICE: JString read _GetEXTRA_DEVICE; {class} property EXTRA_PERMISSION_GRANTED: JString read _GetEXTRA_PERMISSION_GRANTED; end; [JavaSignature('android/hardware/usb/UsbManager')] JUsbManager = interface(JObject) ['{6F603A25-E816-4012-9B23-054B428A4A75}'] function getDeviceList: JHashMap; cdecl;//Deprecated function hasPermission(device: JUsbDevice): Boolean; cdecl; overload;//Deprecated function hasPermission(accessory: JUsbAccessory): Boolean; cdecl; overload;//Deprecated procedure requestPermission(accessory: JUsbAccessory; pi: JPendingIntent); cdecl; overload;//Deprecated end; TJUsbManager = class(TJavaGenericImport<JUsbManagerClass, JUsbManager>) end; Что бы получить доступ к методам интерфейса используется следующая конструкция:
      JavaObject := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.USB_SERVICE); FUsbManager := TJUsbManager.Wrap((JavaObject as ILocalObject).GetObjectID); теперь я могу получить доступ к методам JUsbManager, а как получить доступ к методам JUsbManagerClass
      Вот пример кода на Java, который хочу реализовать в Delphi:
      UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); List<UsbSerialDriver> availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(manager); if (availableDrivers.isEmpty()) { return; } // Open a connection to the first available driver. UsbSerialDriver driver = availableDrivers.get(0); //Вот тут мы видим что из экземпляра класса мы вызываем openDriver, как это сделать в Delphi UsbDeviceConnection connection = manager.openDevice(driver.getDevice()); Как мы можем заметить этого метода в описании интерфейса нет, но есть в классе, как получить доступ к экземпляру класса?
    • От Yarpda
      Доброго дня уважаемые форумчане!
      Есть одна задача, но я не совсем уверен, что так можно, прошу совета.
      В общем есть приложение, в ней база данных SqlLite (файл базы данных деплоится в assets\internal\). Пользователь наполняет эту базу данных своими данными.
      Необходимо сделать возможность экспортирования этих данных на внешний носитель и последующего импортирования уже на другом устройстве.
      Вопрос, даст ли система экспортировать свой файл из assets\internal и главное импортировать его (т.е. фактически заменить существующий файл  базы данных) в папке assets\internal на другом устройстве? (предполагается что root прав у пользователя нет).
      Если да, то можно вкратце объяснить порядок действий (желательно с указанием запрашиваемых и статичных разрешений на это дело, путей обращения к файлам).
      Если нет, то каким образом тогда это можно сделать (формировать промежуточный файл с данными БД, а потом его обрабатывать на другом устройстве средствами СУБД)?
      P.S. Такая задача встала впервые, не очень разбираюсь в теме безопасности на Андроид устройствах и работе с файлами приложения напрямую, поэтому прошу помощи, может быть кто-то уже сталкивался с подобной задачей.
      Заранее спасибо! )
    • От zekelive
      Коллеги, здравствуйте. Помогите пожалуйста с работой потоков. При запуске потока, появляется индикатор и исправно крутится. В какой то момент он залипает и перестает крутиться и так до конца работы потока. Понимаю, что в потоке идет работа с визуальными компонентами, по этому скорее всего и залипает индикатор. Как исправить/оптимизировать код? Спасибо.
      DelOff = class (TThread) protected FOnTaskStarted: TThreadMethod; FOnTaskFinished: TThreadMethod; procedure DoStarted; procedure DoFinished; procedure load; procedure Execute; override; public property OnTaskStarted: TThreadMethod read FOnTaskStarted write FOnTaskStarted; property OnTaskFinished: TThreadMethod read FOnTaskFinished write FOnTaskFinished; end; procedure DelOff.DoFinished; begin Add.Layout1.Visible:=false; if Assigned (Add.FindComponent('Null') as TLayout) then (Add.FindComponent('Null') as TLayout).Free; end; procedure DelOff.DoStarted; begin Add.Layout1.Visible:=true; end; procedure DelOff.load; begin try ReOpen; ClientModule2.ServerMethods1Client.Number13(a,b,g,h); a:='1'; ReOpen; offerlist1.Lines.Text:=ClientModule2.ServerMethods1Client.Number12(a,b,g,h); a:='2'; ReOpen; sumofferlist1.Lines.Text:=ClientModule2.ServerMethods1Client.Number12(a,b,g,h); a:='3'; ReOpen; keyofferlist1.Lines.Text:=ClientModule2.ServerMethods1Client.Number12(a,b,g,h); ReOpen; offercount:=ClientModule2.ServerMethods1Client.Number11(a,b,g,h); except ANM.Show; Add.Visible:=false; ShowmessageToast('Ошибка загрузки',TJToast.JavaClass.LENGTH_LONG); Value := Trim('10,500'); if Add.CheckPermission then if Value.Contains(',') then TVibratorHelper.vibrate(Value.Split([',']), -1) else TVibratorHelper.vibrate(Value.ToInt64); end; end; procedure DelOff.Execute; begin inherited; //Удаление из БД продукта try try Synchronize(DoStarted); updatecount:=StringReplace((Add.FindComponent('LabelIntro') as TLabel).Hint, 'Rec', '', [rfReplaceAll]); a:=(Add.FindComponent('NameProduct'+updatecount) as TLabel).Hint; di:= TZDeviceInfo.Create; b:=StringReplace(di.DeviceID, '=', '', [rfReplaceAll]); if(internet='true') and (server='true') then begin EditCase:='false'; Add.PSB.AutoCalculateContentSize:=false; Add.PSB.EnabledScroll:=true; Add.PSB.AutoCalculateContentSize:=true; synchronize(load); if Assigned (Add.FindComponent((Add.FindComponent('LabelDel') as TLabel).Hint)) then begin (Add.FindComponent((Add.FindComponent('LabelDel') as TLabel).Hint) as TRectangle).Free; (Add.FindComponent('RecEdit') as TRectangle).Free; end; Add.PSB.ScrollTo(0,0,true); for countload:=0 to StrToInt(offercount)-1 do begin (Add.FindComponent('XRun'+IntToStr(countload)) as TFloatAnimation).Enabled:=false; (Add.FindComponent('x'+IntToStr(countload)) as TImage).Opacity:=0; (Add.FindComponent('VRun'+IntToStr(countload)) as TFloatAnimation).Enabled:=false; (Add.FindComponent('v'+IntToStr(countload)) as TImage).Opacity:=0; end; end else begin ShowmessageToast('Нет интернета',TJToast.JavaClass.LENGTH_LONG); Value := Trim('10,500'); if Add.CheckPermission then if Value.Contains(',') then TVibratorHelper.vibrate(Value.Split([',']), -1) else TVibratorHelper.vibrate(Value.ToInt64); end; finally Synchronize(DoFinished); end; except ANM.Show; Add.Visible:=false; ShowmessageToast('Ошибка загрузки',TJToast.JavaClass.LENGTH_LONG); Value := Trim('10,500'); if Add.CheckPermission then if Value.Contains(',') then TVibratorHelper.vibrate(Value.Split([',']), -1) else TVibratorHelper.vibrate(Value.ToInt64); end; end;  
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...