Дениска
-
Постов
23 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные Дениска
-
-
C недавних пор мой старый метод открытия файлов в другом приложении перестал работать на ipad mini и iphone6. Оказалось что Apple ещё с ios 7 представил свой способ передачи файлов Airdrop, он же предоставляет возможность открывать файл в различных приложениях аналогично кнопке Open in. Итак код:
uses {$IFDEF IOS} iOSapi.UIKit, iOSapi.Foundation, iOSapi.CoreGraphics, FMX.Helpers.iOS, Macapi.Helpers, Macapi.ObjectiveC {$ENDIF};
procedure Share(const AControl: TControl; filepath: string); var objects: NSMutableArray; controller : UIActivityViewController; popoverController: UIPopoverController; url: NSURL; procedure ShowForPhone; var Window: UIWindow; begin Window := SharedApplication.keyWindow; if (Window <> nil) and (Window.rootViewController <> nil) then Window.rootViewController.presentModalViewController(controller, True); end; procedure ShowForPad; var Window: UIWindow; PopoverRect: CGRect; AbsolutePos: TPointF; begin Window := SharedApplication.keyWindow; if AControl <> nil then begin AbsolutePos := AControl.LocalToAbsolute(PointF(0, 0)); if AControl.Scene <> nil then AbsolutePos := AControl.Scene.LocalToScreen(AbsolutePos); PopoverRect := CGRectMake(AbsolutePos.X, AbsolutePos.Y, AControl.Width, AControl.Height); end else PopoverRect := CGRectMake(0, 0, 0, 0); popoverController := TUIPopoverController.Alloc; popoverController.initWithContentViewController(controller); popoverController.presentPopoverFromRect(PopoverRect, Window.rootViewController.View, UIPopoverArrowDirectionAny, True); end; procedure ShowActionsSheet; begin if IsPad then ShowForPad else ShowForPhone; end; begin url := TNSURL.Wrap(TNSURL.OCClass.fileURLWithPath(StrToNSStr(filepath))); objects := TNSMutableArray.Create; objects.addObject((url as ILocalObject).GetObjectID); try if objects.count > 0 then begin controller := TUIActivityViewController.alloc; controller.initWithActivityItems(objects , nil); ShowActionsSheet; end; finally objects.release; objects := nil; end; end;
Возможно Вы найдёт для себя что-то лишнее или нагромождённое, но заметьте, этот код подходит и для телефона и для планшета и сделан для быстрого понимания происходящего. Он был "заимствован" и модифицирован из самой RAD Studio из модуля FMX.MediaLibrary.IOS 395 строка. Оригинал же позволял передавать лишь String и TBitmap. Если же Вам нужно передавать именно их, Вы можете открыть этот модуль "C:\Program Files\Embarcadero\Studio\17.0\source\fmx\FMX.MediaLibrary.iOS.pas" и найти в оригинале как это делается.
-
Надеюсь ссылка не будет противоречить правилам форума.
phi, C++Builder and RAD Studio 10 Seattle
30398 PAServer Hotfix RAD Studio 10 Seattle
Спасибо огромное. Абракадабравцы не дают скачивать незаригестрированным
-
Лично я этого почему-то не понял. Embarcadero об этом не говорит
Я их нигде не загружаю. У меня есть функция FakeLoader, но с помощью неё я линкую только статическую библиотеку. У меня вопрос следующего плана: есть ли возможность как-нибудь использовать dylib библиотеки на IOS, если того требует сторонняя SDK? Или, может быть, существует обходной путь. -
Господа! Тема очень важная.
Как использовать сторонние нативные (написанные на Obj-C) фреймворки и SDK в Firemonkey (не дописана).
Имеется SDK, включающий статическую библиотеку, заголовок к ней и кучу классов упрощающих работу с библиотекой.
- libSDK.a
- SDK.h
- class1.h
- class1.m
- class2.h
- class3.m
- ...
- classN.h
- classN.m
Чтобы упростить себе жизнь, немного покопавшись:
- www.youtube.com/watch?v=f7lxkv-sZA0
- www.youtube.com/watch?v=5cnY8WNKRwg
- ...
я собрал из этой кучи файлов одну статическую библиотеку MyLib.a.
(Кому нужно знать как это делается, спрашивайте. Это отдельная тема.)
Как заверяют разработчики этого SDK, для использования этой библиотеки необходимо подключить пару нативных фреймворков и две динамические библиотеки:
- SystemConfiguration.framework
- CoreTelephony.framework
- libstdc++.dylib
- libz.dylib
Фреймворки стандартные и уже реализованы в RAD Studio, а библиотеки присутствуют в скачиваемом IOS SDK по пути:
C:\Users\Username\Documents\Embarcadero\Studio\SDKs\iPhoneOS9.0.sdk\usr\lib.
Embarcadero "побеспокоилась" о подключении сторонних статических библиотек. Создаётся функция (пример взят из сканера баркодов):
implementation
procedure FakeLoader(произвольное имя); cdecl; external 'MyLib.a' name 'OBJC_CLASS_$_MyClass';
Реальная польза этой функции для меня остаётся загадкой, кроме того, что без неё приложение не увидит библиотеки и при попытки обратится к классу выдаст: "ObjectiveC class MyClass could not be found".
Для начала я создал на XCode libHelloWorld.a (думаю не нужно говорить, что она делает).
Немного покопавшись:
- ridingdelphi.blogspot.com/2014/01/the-quest-to-migrate-ios-squarecam-app_3169.html
- blog.blong.com/2013/05/delphi-for-ios-some-notes.html
написал хедер HelloWorld.pas, в котором описал классы и функции хранящиеся в этой библиотеке. Подключил pas в uses в проекте и всё заработало.
(Кому нужно знать как это делается, спрашивайте. Это отдельная тема.).
Решил теперь подключить мою MyLib.a, которую я создал из основе SDK, можно сказать конвертировал. Но она требует две динамические библиотеки, что в случае с HelloWorld не требовалось.
Как подсказывает Embarcadero, мне нужно дописать в мой FakeLoader директиву dependency. Итого:
procedure FakeLoader; cdecl; external 'MyLib.a' name 'OBJC_CLASS_$_MyClass'
dependency 'libstdc++.dylib', 'libz.dylib';Но вот тут и нужна Ваша помощь!
Я помещал эти библиотеки прямо в проект, указывал абсолютные пути из MacPC и из моего PC, копировал оригинальные библиотеки из MacPC, писал их с расширением и без, с префиксом "lib" и без. IDE твердит одно:
[DCC Error] E2597 ld: library not found for -llibz.dylib[DCC Error] E2597 ld: library not found for -llibstdc++.dylibБез этих библиотек моя статическая библиотека MyLib.a не компилируется с ошибками:
Error: "blablabla", referenced from: lalalala in MyLib.a(Class1.o); lalalala in MyLib.a(Class1.o);Error: "qwertyuui", referenced from: olololo in MyLib.a(Class2.o); olololo in MyLib.a(Class2.o);Error: "abracadabra", referenced from: abcdefjgh in MyLib.a(Class3.o); abcdefjgh in MyLib.a(Class3.o);...Кто сталкивался? Кто знает чем помочь? Пишите. Сейчас мой проект простаивает из-за этой проблемы. -
Всем доброго дня.Кто встречался с такой проблемой, помогите разобраться...При запуске на телефоне (Meizu MX4 на Flyme(Android 5.0.1)) в режиме разработки также при сборке подписанной версии любой программки, возникает следующая ошибка:При активации Edit, либо вылетает программа, либо виснет... либо все таки включается клавиатура, но раз на раз..пробовал на Sony Z3, на LG G2 там все ок.. как часы. А вот у меня ошибки постоянные.
Запусти LogCat. Посмотри какие ошибки пишет? У меня тоже после обновления Galaxy Tab до 5.1 проблема при запуске с определённой ориентацией экрана
getStack: Window{16a35e14 u0 d0 com.xxx.android/com.embarcadero.firemonkey.FMXNativeActivity} couldn't find taskId=45
-
XE8 Ent.
Установил Lockbox 2 и 3 с помощью Getit.
Оба работают на всех платформах кроме ios64.
Это и меня ошибка или в библиотеках???
Какая ошибка? У меня тоже не компилировался, показывал ошибку в библиотеках. Я исправил, сейчас работает на ios64
-
на OnClose формы делаем так:
procedure TForm2.OnClose(Sender: TObject; var Action: TCloseAction);beginAction := TCloseAction.caFree;end;и освобождаем форму не Free, а DisposeOf:Form2 := TForm2.Create(nil);Form2.ShowModal;Form2.DisposeOf; -
implementation uses IOUtils {$IFDEF IOS} ,iOSapi.Foundation, FMX.Platform.Ios, iOSapi.UIKit, Macapi.Helpers {$ENDIF} ; procedure TForm1.Button1Click(Sender: TObject); var fpath: string; begin fpath:= TPath.GetDocumentsPath + PathDelim + 'filename.extention'; OpenIn(fpath); end; procedure TForm1.OpenIn(path: string); {$IFDEF IOS} var controller : UIDocumentInteractionController; URL: NSURL; {$ENDIF} begin {$IFDEF IOS} URL := TNSUrl.Wrap(TNSUrl.OCClass.fileURLWithPath(StrToNSStr(path))); controller := TUIDocumentInteractionController.Wrap( TUIDocumentInteractionController.OCClass.interactionControllerWithURL(URL)); controller.presentOpenInMenuFromRect( WindowHandleToPlatform(self.Handle).View.frame, WindowHandleToPlatform(self.Handle).View,true); {$ENDIF} end;
-
Как открыть файл из вашего приложения в другом приложении?
-
Много что может быть не так вплоть до брэндмауера... На какой то другой версии Rad Studio работало?
да, на XE7 работало отлично.
-
http://www.delphipraxis.net/184703-delphi-xe8-android-debug.html
У товарищей немцев тоже не работает.
Да, читал.
-
Коллега устанавливал на виртуалку Win 7 XE8 - у него всё заработало. У меня же на планшете 4.4.2 - работает дебаг, а на телефоне 4.2.2 - нет. Я просто стянул его виртуалку и работаю на ней. Походу раз на раз не приходится. Пробуйте устанавливать заново и заново.
-
А как вы подключаете телефон, к виртуальной машине и USB пробрасываете во внутрь?
В vmware есть технология, позволяющая подключать периферийные устройства, аналогично подключению принтера или фотика. Давай ближе к сути. Знаешь, что может быть не так? Кстати проверил на симуляторе версии апи 5.0 - лезет ошибка и дебагер запускается. А на симуляторе ниже 5.0 дебагер молчит, но приложение запускается без ошибки.
-
На виртуальной машине установил XE8 параллельно с XE7. Создал тестовое приложение с ошибкой. Запустил по F9 на телефоне. Отладчик не запускается, ошибку не отлавливает. На Win и iOS работает.
Скажите мне, что у Вас работает отладка на андроиде и это не баг XE8, чтоб я вздохнул с облегчением.
-
Поставил XE8. По F9 и по кнопке не запускается отладочное окно. Пустой проект с настройками по умолчанию. Конфигурация Debug-Debug. В проекте все галочки на отладку установлены.
Что не так?
-
Я решил это 2 способами!!
Закрытие приложения по кнопке "Home":
нужно в "...\iOSDevice\Release\myapp.info.plist" после строки "<string>ResourceRules.plist</string>" добавить строку "<key>UIApplicationExitsOnSuspend</key><true/>".
Закрытие приложения по кнопке из приложения:
procedure TForm1.Button1Click(Sender: TObject);
beginHalt(0); //аварийное завершениеend;Удачи =) -
У меня XE7 update1. Я нашёл ещё одну причину такого поведения. Проблема решена. В мобильных платформах вместо Free или Close нужно использовать DisposeOf.
http://fire-monkey.ru/topic/10-kak-pravilno-udaliat-kontroly-v-runtime/
-
Пустое приложение. У меня есть формы: А и B.
А по кнопке создаёт и показывает B и сразу самоуничтожается:
B := TB.Create(nil);B.Show;A.Free;B в свою очередь делает обратное:A := TA.Create(nil);A.Show;B.Free;На Win32 платформе в диспетчере задач память по мере открытия форм не растёт. В iOS 6.1.1 iPhone 3 проследить память я не смог, но после 5-10 открытий форм приложение падает. Вероятнее всего растёт хип (heap).Почему тогда не работает FREE?? Как правильно освободить память и уничтожить форму в iOS???Я нашёл ответ. Если на форме есть картинки, то их нужно: Image1.Bitmap.Assign(nil); -
http://fire-monkey.ru/topic/950-xe7-ios-vazhno-vladeltcam-xe7-ne-obnovliat-ios-do-versii-813/
В версии 8.1.3 изменился запуск приложения.
Величайшее спасибо. Спустя 4 часа лазания от ссылки к ссылке и метода тыка я запустил таки на ios 8.2 своё приложение.
Это мне помогло - http://blogs.embarcadero.com/ao/2013/05/24/39472
Только вместо кода:
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>application-identifier</key>
<string>12345ABCDE.com.example.myapp</string>
<key>aps-environment</key>
<string>development</string>
<key>get-task-allow</key>
<true/>
</dict>
</plist>
я вставил:
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>application-identifier</key>
<string>12345ABCDE.com.example.myapp</string>
<key>get-task-allow</key>
<true/>
</dict>
</plist>
-
Спасибо, подправил. Разместил вашу ссылку, у Сарины Дю Пон лучше описано.
Hotfixа всё ещё нет?
-
Создаю пустой проект в конфигурации AdHoc на девайсе с версией ios 6.1. Великолепно запускается.
Беру ipa и пытаюсь установить его на девайс с версией ios 8.2 (вышедшей 11 марта 2015). Не устанавливается. Просто висит "установка...", а на девайсе иконка с прогрес баром установки доходит до 60-80% и сбрасывается. Потом просто висит иконка из iTunes.
Этот же пустой проект на девайсе ios 8.2 билдится, но не устанавливается с ошибкой "Unable to install package e800003a".
Что я не так делаю? Скажите как надо так?
PS: все provisioning profiles присутствуют на обеих устройствах. Оба девайса в них добавлены. Мин. версия в проекте ios 6.0.
-
Мне нужно получить имена (или пути с именами) всех картинок, которые можно просмотреть через галерею (photo library). После, используя эту информацию, получить bitmap определённой картинки.
Как отключить автозавершение текста
в TEdit
Опубликовано
Актуальный вопрос. С появлением Lollipop на некоторых телефонах началась эта лажа! Как управлять автозавершением слов программно?