Перейти к содержанию
  • Регистрация
  • 0
AndreyS

Распространение ПО для OSX

Вопрос

Доброго всем дня. Столкнулся со следующей проблемой:

Есть приложение для OSX, написанное на FMX (.app, упакованное в dmg). Если пользователь скачивает это приложение с сайта (сторонний сайт, не AppStore), то при запуске OSX говорит, что это приложение нельзя запускать, т. к. неизвестен издатель и пр. Так вот, что конкретно нужно сделать с этим приложением (перед деплоем или уже после), чтобы OSX не ворчала? Просто хочется заранее узнать, до того, как заплатить $99 для подключения к Developer program. Заранее спасибо.

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


Ссылка на сообщение
Поделиться на другие сайты

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

  • 0

1. Получить на сайте сертификаты (Developer ID Application и 3rd Party Mac Developer Installer).

2. Установить их на Маке.

3. Прописать их в Delphi (Tools->Options->Provisioning)

4. Сделать Deploy с конфигурацией AppStore

 

После этого на Маке появится [ваше приложение].pkg, на который уже не ругается OSX

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Спасибо. Только тогда у меня возникает следующий вопрос: Сейчас я использую программу DropDMG для создания инсталлятора. Т. е. пользователь запускает .dmg файл, у него открывается лицензионное соглашение, и если он его принимает, то открывается окошко, где ему предлагается перенести файл программы в папку Applications. Каким образом будет происходить процесс инсталляции, если исходный файл будет pkg? И возможно ли в него будет вставить лицензионное соглашение?

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Не знаю как в DropDMG (и зачем DMG). Создайте .pkg (стандартными средствами) и распростроняйте. Некоторое время назад задавался вопромом - PKG или DMG.

Отказался от DMG почитав его спецификацию. Если создавать инсталляшку под Mac - то или pkg или mpkg. DMG - просто представление Вашего приложения в виде образа диска.

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Да я лично ничего против PKG не имею. Меня здесь интересует исключительно вопрос возможности отображать пользователю лицензионное соглашение перед установкой.

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Распространять лучше  ИМХО как .app а не пакет

Подписывайте сертификатом Developer-ID или Developer-Sing, они специально для этого предназначены, ниже по ссылке дока, там есть как распространять приложения в App Store и вне App Store, разница именно в том как подписывается приложение.

К сожалению дока по Xcode 

https://developer.apple.com/library/mac/documentation/IDEs/Conceptual/AppDistributionGuide/DistributingApplicationsOutside/DistributingApplicationsOutside.html#//apple_ref/doc/uid/TP40012582-CH12-SW2

Изменено пользователем gerasim_sergey

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 час назад, gerasim_sergey сказал:

Распространять лучше  ИМХО как .app а не пакет

Как APP я бы не советовал - это все равно как под винду выкладывать голый EXE-шник... а PKG и в стандартную папку Applications установит и Bandle зарегит и права раздаст.

К тому же 

В 20.02.2016в12:35, AndreyS сказал:

... интересует исключительно вопрос возможности отображать пользователю лицензионное соглашение перед установкой...

 

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Продублирую, может, найдётся подходящий совет:

Цитата

Дано: n (от 10 до бесконечности) рабочих станций под управлением MacOS. Работают автономно, интернета в ЛВС нет. На всех р/с установлена самописная программа. Есть также локальный FTP. Задача: обновлять программу с локального FTP. В окружении с Windows это решается элементарно: на FTP по мере публикации обновления выкладываются *.ini и *.exe, и каждый клиент при запуске автоматически проверяет наличие доступного обновления. Есть - значит, скачиваем и обновляем открытый *.exe с заменой, закрываем открытую старую копию, удаляем её и запускаем новую. На всё про всё - несколько секунд даже на стареньком Celeron 1.7GHz. При запуске опять проверяем обновление (но, естественно, в упор не видим его, потому что только что были обновлены), и продолжаем работать. Но что делать в окружении с MacOS? Приложение - вроде как и не исполняемый файл вовсе, а обычный каталог. Ок, можно его за-ZIP-овать, скачать и распаковать. А дальше как быть? Паковать и скачивать в *.dmg? А как его распаковывать в автоматическом режиме? В идеале хочется, чтобы пользователь при наличии обновления для MacOS-приложения вообще ничего не делал: приложение при запуске проверило наличие обновления, скачало его с локального FTP (если оно доступно) и само себя обновило, после процесса обновления удалив бесследно старую копию, и автоматически запустив новую.

В версии на Windows у меня сейчас именно так и реализовано: пользователь при старте приложения видит прогресс-бар загрузки обновления (если оно доступно, конечно), через несколько секунд прогресс-бар загрузки закрывается, и открывается уже обновлённое приложение. И никаких манипуляций со стороны пользователя: так и ему спокойнее, и (что самое главное) мне самому. При этом ни байта не уходит наружу, и не приходит извне ЛВС. Всё происходит внутри периметра, где расположен сервер FTP. Теперь хочется этот же опыт перенести на MacOS. Всё-таки не во всех компаниях на р/с с MacOS есть учётные записи, да и интернет далеко не всем подключен (для доступа к тому же магазину приложений), а если даже и подключен, то всё строго лимитировано.

 

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


Ссылка на сообщение
Поделиться на другие сайты

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

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

Гость
Ответить на вопрос...

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

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

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

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

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


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

    • От Ra72
      Ситуация следующая:
      1. Обновил  iOS до версии 10.3.2.
      2. XCode 8.1 стал писать что с этой версией iOS он работать отказывается.
      3. Обновил macOS до версии Sierra 10.12.5 и XCode до версии 8.3.2. Телефон стал определяться.
      4. При попытке создать пакет для выкладки в AppStore (Delphi 10.1 Berlin) получил ошибку:
      [PAClient Error] Error: E0776 xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH 5. Обновился до версии Delphi 10.2 Tokyo, ситуация не изменилась.
      В интернетах пишут что пакеты в AppStore теперь другие. Советуют откатиться на версию  XCode 8.2.1, но она не устанавливается на macOS Sierra 10.12.5. Да и большие сомнения, что Apple опубликует пакет старого образца...
      Как быть?
    • От rakhmet
      Для FMX-приложения понадобилось разместить кнопки с битмапами в заголовке OSX-окна:

      Здесь был, это читал, но подходящего Delphi-решения найти не смог. Есть какие-нибудь идеи?
    • От Ra72
      Тоже не могу долгое время опубликовать приложение на AppStore. Проблема та же что и в соседней ветке, Apple требует работу в сети IPv6. 
      Хочу осветить проблему немного под другим углом. А как воспроизвести условия, для проверки данного требования?
      Проще говоря, как сделать так чтобы у меня на стенде тоже не работало? Потому что сейчас у меня все работает, и я не могу отладить данное требование.
      (в стендовом MacBook разъем для подключения LAN отсутствует)
    • От FeLDMARShaL
      Решили мы обновить свое приложение в AppStore (С момента прошлой успешной публикации было очень незначительные изменения, исправлены синтаксические ошибьки, немного изменен интерфейс и еще по мелочи). До этого момента всегда с первого раза проходили проверки (на нескольких приложениях). А тут нам пришел отказ, мол наше приложение не работает с их IPv6 сетью.
      Вот полный текст отказа (если кому то интересно):
      В статье https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW1 написано как настроить на маке сеть с поддержкой DNS/NAT64 (пункт To set up a local IPv6 Wi-Fi network using your Mac)
      Настроили мы такую эмуляцию и запустили наше приложение, и оно действительно не может достучаться до глобала. Сначала мы подумали на неподдержку такого режима нашими сторонними (платными и довольно известными) компонентами RTC. Но я попробовал сделать нечто похожее штатными средствами (при помощи инди и получил точно такую же ошибку), код с инди прикрепляю:
      var IdHttp: TIdHTTP; Data, ResponseContent: String; AData, AResponseContent: TStringStream; begin IdHttp := TIdHTTP.Create(nil); try Data := ''; try AData := TStringStream.Create(Data); AData.Position := 0; AResponseContent := TStringStream.Create; try IdHttp.Request.ContentType := 'application/x-www-form-urlencoded;charset=UTF-8'; try IdHttp.Get('http://185.17.120.131:10020/HelloWorld', AResponseContent); except ShowMessage('f'); end; AResponseContent.Position := 0; ResponseContent := AResponseContent.DataString; ShowMessage(ResponseContent); finally FreeAndNil(AResponseContent); end; finally FreeAndNil(AData); end; finally FreeAndNil(IdHttp); end; end; Есть какие нибуть идеи как такое можно вылечить или обойти? Проблема более чем актуально.
      п.с. использую Delphi 10 Seatle + последняя мак ось на мак мини.
      п.с.2. Может быть эта проблема исправлена на Delphi 10.1 Berlin?
    • От Ilya.Z
      Столкнулся с такой проблемой, (Delphi Seattle, OSX+ WIndows 10) делаю форму со своим заголовком, при установленных свойствах Transperency := True  или BorderStyle := None,
      переход в режим FullScreen не отрабатывается корректно (форма не изменяет размер на максимальный),  решил перед переходом в полноэкранный режим устанавливать   Transperency := False  и BorderStyle отличный от None, но программа вылетает, иногда сразу иногда на 2-3 раз смены параметров, причем независимо от того что меняю прозрачность или бордер.  если запускать через отладчик то вываливается на такое -
      в System.Internal.ExcUtils;
      {   RaiseSignalException is called from SignalConverter, once we've made things look   like there's a legitimate stack frame above us.  Now we will just create   an exception object, and raise it via a software raise. } procedure RaiseSignalException(ExceptionEIP: LongWord; FaultAddr: LongWord; ErrorCode: LongWord);
      begin  
        raise GetExceptionObject(ExceptionEIP, FaultAddr, ErrorCode);
      end;
      под Windows все работает нормально, без всяких выкрутасов
      для проверки можно сделать пустую форму, две кнопки , и скажем панель за которую перетаскивать форму
      и три обработчика-
      procedure TForm1.Rectangle1MouseDown(Sender: TObject; Button: TMouseButton;   Shift: TShiftState; X, Y: Single);
      begin
       if (Button = TMouseButton.mbLeft) and (y < 25) then StartWindowDrag;
      end;
      procedure TForm1.sbExpandClick(Sender: TObject);
      begin
        i f BorderStyle = TFmxFormBorderStyle.None then  
                  BorderStyle := TFmxFormBorderStyle.Single  
         else  BorderStyle := TFmxFormBorderStyle.None;
      end;
      procedure TForm17.sbFullClick(Sender: TObject);
      begin  
        FullScreen := not FullScreen;
      end;
      Может кто то сталкивался, как под OSX в рантайме менять у формы прозрачность и бордер не вываливаясь в исключения, или нормально обрабатывать переход в полноэкранный режим у прозарчной (или без стандартного заголовка) формы
      Спасибо
    • От AndreyS
      Всем доброго дня!
      После обновления OSX до El Capitan появился один эффект, который сильно мешает. В моей программе я не использую FullScreen для форм. Дело в том, что при FullScreen на OSX при нескольких открытых окнах, особенно если некоторые из них модальные бывают глюки, когда немодальное окно вдруг становится поверх всех окон, но при этом неактивным, т. к. есть модальное окно, на котором сейчас фокус. Раньше я не парился по этому поводу, т. к. мое приложение просто разворачивалось так же, как в винде. Но после обновления на El Capitan в заголовке формы отображается кнопка перехода в в FullScreen в независимости от значений соответствующих флажков у TForm. Есть ли какой-нибудь способ запретить окну переходить в FullScreen?
      Заранее спасибо.
    • От masmat
      При выкладке приложения в AppStore появилась вот такая ошибка 

       
      Загружаю через Loader. 
      Кто-нибудь смог решить эту ошибку? Подскажите
       
    • От AndreyS
      Доброго всем дня! У меня в  самый неподходящий момент возникла следующая проблема:
       
      Есть приложение для Win и Mac. Работает с SQLite (Через FDQuery).
      Естественно, в базе куча данных с кириллицей. Так вот, на Win - все нормально, на одном Mac(10.10) - тоже все хорошо. Попробовал поставить на второй Mac(10.9.5) - b и вот там уже начались проблемы с кодировкой. Причем, читает из таблицы 
      S := Query.FieldByName('Title').AsString; //Без проблем а вот при записи в таблицу
      Query.ParamByName('Title').AsString := 'Заголовок'; В таблицу записывается '????????' (Причем именно запись идет неправильно). При подключении к базе Указываю, что StringFormat=Unicode.
       
      Может кто-то сталкивался с таким уже?
       
      Есть подозрения, что на 10.9.5 какая-то старая dylib, которая неправильно работает с кириллицей. тогда, наверное, нужно подключать свою к приложению, но опять же, где ее взять и как подключить? 
    • От dnekrasov
      Создаю глобальный hook на несколько событий:
      {$IFDEF MACOS} var EvtTap: CFMachPortRef; RunLoopSource: CFRunLoopSourceRef; {$ENDIF} ... procedure CreateGlobalHook; {$IFDEF MACOS} var EvtMask: UInt64; {$ENDIF} begin {$IFDEF MACOS} if EvtTap = nil then begin EvtMask := (1 shl kCGEventKeyDown) or (1 shl kCGEventFlagsChanged) or (1 shl kCGEventLeftMouseUp); EvtTap := CGEventTapCreate(kCGAnnotatedSessionEventTap, kCGTailAppendEventTap, kCGEventTapOptionListenOnly, EvtMask, @EventTapHandler, nil); RunLoopSource := CFMachPortCreateRunLoopSource(kCFAllocatorDefault, EvtTap, 0); CFRunLoopAddSource(CFRunLoopGetCurrent, RunLoopSource, kCFRunLoopCommonModes); end; CGEventTapEnable(EvtTap, 1); {$ENDIF} end; function EventTapHandler(proxy: CGEventTapProxy; type_: CGEventType; event: CGEventRef; refcon: Pointer): CGEventRef; cdecl; {$IFDEF MACOS} var iKey: Integer; iType: Integer; {$ENDIF} begin {$IFDEF MACOS} Result := event; iType := CGEventGetType(event); iKey := CGEventGetIntegerValueField(event, kCGKeyboardEventKeycode); case iType of kCGEventFlagsChanged: ...; kCGEventLeftMouseUp: ...; kCGEventKeyDown: ...; end; {$ENDIF} end; При обработке события возникает проблема: приходят все события кроме kCGEventKeyDown В документации нашел, что kCGEventKeyDown и kCGEventKeyUp приходят только в том случае если приложение запущено от root-а или внесено в список "System Preferences->Security & Privacy->Privacy->Accessibility"
       
      Может кто знает как мне программно получить доступ к этим событиям?
    • От AndreyS
      Друзья, подскажите, пожалуйста, каким образом можно ассоциировать программу для MacOS c с определенным типом файлов? Таким образом, чтобы при двойном клике выбранный файл открывался именно в этой программе. Для Windows это делается просто, прописываешь в реестр нужные ключи (при установке) и обрабатываешь через ParamStr(1). Но для маков, насколько я знаю, это все происходит по-другому сценарию. В инете нашел инструкцию как это сделать (https://delphihaven.wordpress.com/2012/08/10/associating-a-file-type-on-osx-part1/), но там для XE2, сейчас многое уже поменялось даже в реализации основного интерфейса от которого идет вся работа. Может кто-то знает как теперь правильно все это реализовать?
       
      Заранее благодарен.
  • Последние посетители   0 пользователей онлайн

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

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