Перейти к содержанию
  • 0
notricky

TZipFile на MACOS - программный unzip, чтобы приложение запускалось

Вопросы

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

Ну а дальше приложение не запускается, хотя:

 - Настройки безопасности настроены на установку из любых мест
 - Встроенный архиватор разархивирует в папку и "из-под" него приложение запускается (до настроек безопасности просто выдавало ошибку "неизвестный автор" и "у вас настроено только на аппстор или известных авторов").
 - Разумеется при деплое приложения работают. Если их просто скопировать на флешку и потом закопировать обратно - тоже работают.

Следовательно проблема при разархивировании программно. Что-то нужно добавить. Есть понимание что именно? 

Сам нетривиальный код:

var z: TZipFile;
begin
  try
    {$IFDEF MSWINDOWS}
     RenameFile(ParamStr(0),ExtractFileName(ParamStr(0)) + '.old');
     Application.ProcessMessages;
    {$ENDIF}
    SetLength(Result, 1);
    Result[0] := '';
    z := TZipFile.Create;
    z.Open(ZipFile, zmRead);
    z.ExtractAll(ExtractTo);
    Result := z.FileNames;
  finally
    z.Close;
    z.Free;
  end;
end;

В архив кладу:

 - .app взятый с мака (а по другому никак)
 - .entitlements
 - .DS_Store 

В надобности последнего я сильно сомневаюсь.

 

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

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


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

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

  • 0

Update: в терминале Мака

unzip -uo zipfile -d wantedDirectory

Дает такой же эффект, что программное разархирирование. То есть не запускается приложение. Вообще без никаких уведомлений.

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

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


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

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

Ну а дальше приложение не запускается, хотя:

 - Настройки безопасности настроены на установку из любых мест
 - Встроенный архиватор разархивирует в папку и "из-под" него приложение запускается (до настроек безопасности просто выдавало ошибку "неизвестный автор" и "у вас настроено только на аппстор или известных авторов").
 - Разумеется при деплое приложения работают. Если их просто скопировать на флешку и потом закопировать обратно - тоже работают.

Следовательно проблема при разархивировании программно. Что-то нужно добавить. Есть понимание что именно? 

Сам нетривиальный код:


var z: TZipFile;
begin
  try
    {$IFDEF MSWINDOWS}
     RenameFile(ParamStr(0),ExtractFileName(ParamStr(0)) + '.old');
     Application.ProcessMessages;
    {$ENDIF}
    SetLength(Result, 1);
    Result[0] := '';
    z := TZipFile.Create;
    z.Open(ZipFile, zmRead);
    z.ExtractAll(ExtractTo);
    Result := z.FileNames;
  finally
    z.Close;
    z.Free;
  end;
end;

В архив кладу:

 - .app взятый с мака (а по другому никак)
 - .entitlements
 - .DS_Store 

В надобности последнего я сильно сомневаюсь.

 

Ты пытаешься свою же созданную программу для мак ос, заархивировать, а своей же созданной разархивировать и запустить? Или я что то не понял? Если как я написал, то ничего не получится.

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


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

Ты пытаешься свою же созданную программу для мак ос, заархивировать, а своей же созданной разархивировать и запустить? Или я что то не понял? Если как я написал, то ничего не получится.

Спасибо, Кэп. Я это наблюдаю в опыте. Описал ты все верно. Лучше расскажи, почему "не получится"?

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


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

А дериктивы для виндовс в коде зачем?

Про андроид не забыл?

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


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

В принципе можно и консольную команду выполнить. По сути мне без разницы, хотя конечно было бы круто, если бы это работало через апп. Но вот только консольный unzip не работает тоже. 

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


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

Спасибо, Кэп. Я это наблюдаю в опыте. Описал ты все верно. Лучше расскажи, почему "не получится"?

Все очень просто. Приложение мак представляет из себя директорию с расширением .app. Мак ее воспринимает как файл. А внутри находятся еще куча директорий и естественно, запускной файл. Нажми на фоне приложения правую кнопку мыши с кликни по 'показать содержимое пакета'. И мак тебе покажет содержимое этой директории. Вот как пример моя программа:

Screenshot at дек. 26 07-49-48.png

Наверху программа Pharmsuitepro.app, а что в ней видно. Сама программа, которую компилит дельфи (бинарник) в директории contens -> MacOs -> pharmsuitepro

Поэтому, когда ты разархивируешь другой файл, он ложится не в директорию программ, а в директорию из которой ты пытаешься разархирировать. То есть внутри другой директории. А мак такие не запускает.

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

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


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

Поэтому, когда ты разархивируешь другой файл, он ложится не в директорию программ, а в директорию из которой ты пытаешься разархирировать. То есть внутри другой директории. А мак такие не запускает.

А какая именно разница между разархивацией внутри своей проги и разархивацией встроенными осью средствами? И как это повторить?

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


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

А какая именно разница между разархивацией внутри своей проги и разархивацией встроенными осью средствами? И как это повторить?

Да никакой. Просто при разархивации внутри проги, нельзя указывать место запуска самой программы. 

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


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

Да никакой. Просто при разархивации внутри проги, нельзя указывать место запуска самой программы. 

Я же писал, что даже при использовании консольного unzip РУКАМИ ПРЯМО В МАКЕ, ситуация такая же. 

Дело вообще рядом не лежит про "место запуска самой программы".

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


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

Тогда три вопроса:

1) приложение твое? 

2) если оно твое, то запускается ли оно до архивирования?

3) чем архивируешь?

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

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 28.12.2016 в 05:47, Vitaldj сказал:

Тогда три вопроса:

1) приложение твое? 

2) если оно твое, то запускается ли оно до архивирования?

3) чем архивируешь?

Ооох.... Ну что за вопросы...

1) да
2) да
3) какая разница. формат zip.

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


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

Ооох.... Ну что за вопросы...

1) да
2) да
3) какая разница. формат zip.

Если бы ты внимательно читал, то в первом посте писал особенность мак оси. Почему то, если программы заархивировать не средствами самой мак оси, то потом не открываются из архива. Попробуй свою программу заархивировать по правой кнопке:

Screenshot at дек. 29 20-09-08.png

То есть выбери сжать, а потом, снова достань из архива. Все будет работать. А если из винды, допустим, то ничего не получится. Я не знаю почему так. Возможно он что то добавляет в архив или как то специально помечает, маркирует его. Я не знаю почему так...

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


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

Ладно, я явно этого не указал, а ты мысли читать не умеешь, потому вопрос справедлив. :) Сорри.

Я архив создаю в Винде. 7Zip.

Если разархивирую в маке дважды кликнув - запускается.

Если разархивирую в маке unzip в консоли - не запускается.

Если разархивирую своим приложением - не запускается.

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


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

Ладно, я явно этого не указал, а ты мысли читать не умеешь, потому вопрос справедлив. :) Сорри.

Я архив создаю в Винде. 7Zip.

Если разархивирую в маке дважды кликнув - запускается.

Если разархивирую в маке unzip в консоли - не запускается.

Если разархивирую своим приложением - не запускается.

Не знаю. Мыслей нет. А что пытаешься то сделать?

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


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

Не знаю. Мыслей нет. А что пытаешься то сделать?

Обновление :) он-лайн.

 

На винде и андроиде (не через стор) работает. На маке вот пока нет. 

Нужно скачать и обновить. Ну или если не получается, то может как то пользователю открыть файндер и указать на файл. Не понятно совсем почему штатный unzip через консоль не справляется.

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


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

Обновление :) он-лайн.

 

На винде и андроиде (не через стор) работает. На маке вот пока нет. 

Нужно скачать и обновить. Ну или если не получается, то может как то пользователю открыть файндер и указать на файл. Не понятно совсем почему штатный unzip через консоль не справляется.

То есть ты пишешь модуль обновления программы на маке?

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


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

То есть ты пишешь модуль обновления программы на маке?

Модуль? Какой модуль? О чем речь?

Функцию и пару строк кода в программе если можно назвать модулем то да, это он.

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


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

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

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

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

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

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

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

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

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


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

    • От Eric Myval
      Сегодня начал разбираться с компиляцией под Mac и под iOS и сразу столкнулся с проблемами. Использую Rad Studio 10.3.3, Mac Mini 10.15.1, Windows 10. PAServer20.0, Xcode 11.2.1 Выдает следующую ошибку на всех платформах, как iOS, так и iOS Simulator, macOS32 - 
      Unable to launch process on '192.168.8.182' using the parameters from the 'MacMini' profile. The following error was returned: 'Unable to create process: /Applications/PAServer-20.0.app/Contents/MacOS/dbkosx_26_0 Получается собрать проект только в macOS64, но! Приложения запускаются, работают, но после их закрытия в отладке, пишет, что ПО устаревшие и кидает ссылку на переход с 32 на 64. Но как так? Оно же собрано на 64х))) В общем, полный тупик и убил весь день. Есть идеи? 
    • От Алиса Романец
      Доброго времени суток, форумчане!
      Есть программка, которая имеет свой конфиг. И если на винде, я могу спокойно складировать этот конфиг в папку C:\ProgramData, то с маком всё сложнее. Просто так записать конфиг и папку в /Library/Application Support/ не получится, требуются права администратора. Замучавшись с попытками сохранения конфига в эту папку, я решила пойти другим путём и заставила программу сохранять этот конфиг (вместе с последующими генерируемыми программой файлами) внутрь себя (MyProgramm.app/Contents/MacOS). Первое время всё работало нормально, файлы сохранялись, генерировались в саму программу. Но, как обычно бывает, что-то пошло не так и... В результате, сейчас я имею то, что программа при первом запуске из RAD генерирует первый конфиг в себя (MyProgramm.app/Contents/MacOS/Config.cfg), запускается при запуске из RAD. НО, стоит мне запустить её независимо от студии (в надеждах, что она считает конфиг внутри себя, как она делала раньше), как она просто падает. Добавив небольшое ShowMessage(FileExists('Config.cfg').ToString()); в качестве отладки, я узнаю, что она падает из-за того, что НЕ МОЖЕТ НАЙТИ ФАЙЛ КОНФИГА, ЧТО НАХОДИТСЯ В НЕЙ САМОЙ. Затем, методом тыка было обнаружено, где именно он пытается найти этот файл - в корне диска с системой. Вопрос к вам, как пофиксить это дерьмо? 
      Сразу скажу, код со вчерашнего дня вообще не менялся. Фрагмент работы с конфигом я приложила ниже.
      procedure TForm1.FormCreate(Sender: TObject); var PRGP, OUTP: String; i: Integer; begin {тут находится код для MSWINDOWS} {$IFDEF POSIX} AssignFile (CFG, 'AErenderConfiguration.cfg'); //Привязка файла, что по идее должен быть внутри софта if FileExists ('AErenderConfiguration.cfg') then //Тут ошибка вылезает, потому что он не может найти файл в корне диска begin //Чтение самого конфига Reset (CFG); Readln (CFG, LANG); Readln (CFG, PRGP); Readln (CFG, OUTP); Readln (CFG, AERPATH); Readln (CFG, DEFPRGPATH); Readln (CFG, DEFOUTPATH); projectPath.Text := PRGP; outputPath.Text := OUTP; Lang1.Lang := LANG; CloseFile (CFG); end else begin //Действия, если конфиг не существует. Тоже ошибка, потому что в macOS корень диска заблокирован для записи. Rewrite (CFG); for i := 1 to 6 do Writeln (CFG, ' '); LANG := 'EN'; Lang1.Lang := LANG; CloseFile (CFG); end; {$ENDIF POSIX} RAD Studio 10.3 Rio (26.0.32429.4364), PAServer 20.0, macOS 10.13.6 High Sierra (MacBook 13" Mid 2010). 
    • От long_island
      Всем привет. Встал вопрос после обновления MacOS до High Sierra. Ранее для работы приложения через https из коробки работал Indy в RAD Studio 10.0. После обновления MacOS стала появляться ошибка о невозможности подгрузить библиотеку OpenSSL. Понял, что в обновленной MacOS теперь используется LibreSSL и из коробки теперь не работает. Перерыл тонну материала, но вопрос остался не решенным. Надеюсь, что кто - то имеет какие - то догадки в этом направлении.
    • От Pulsarius
      Всем привет! Кто-нибудь может подсказать как можно удалить ссылку в проекте на неиспользуемую статичную либу, чтобы она не линковалась к исполняемому файлу? Обыскал всё в настройках проекта, так и не смог найти. Дело в том, что я как-то в FMX проекте использовал невизуальный VCL компонент, добавленный через дизайнер форм. Потом я его удалил, но линковщик всё равно линкует в exe-шник библиотеки типа vcl.lib, vclx.lib, что абсолютно напрасно увеличивает размер исполняемого файла.
    • От AliZairov
      Привет. Я сделал macos установку web installer с Delphi Berlin.

      Программа дает .bpl ошибка открытия файла.

    • От Alex7wrt
      На MacOS и iOS вылетает приложение при попытке чтения из ресурса.
      Этот код нормально работает на Windows и Android, а на MacOs и iOS приводит к вылету приложения.
      procedure TForm1.Button1Click(Sender: TObject); var rs: TResourceStream; begin rs:=TResourceStream.Create(0,'png1',PChar(RT_RCDATA)); image1.Bitmap.LoadFromStream(rs); rs.Free; end;
      В чем может быть причина?
    • От Alex7wrt
      Добрый день.
      Пытаюсь запустить приложение на IOS симуляторе. При компиляции выскакивает сообщение:

      При этом на MacOS приложения запускаются нормально.
      В чем может быть проблема?
      Berlin Update 1. XCode 8.1. PAServer 18.0
    • От Равиль Зарипов (ZuBy)
      DeviceInfo - модуль для получения информации о девайсе
      Android || Windows || IOS || MAC OS
        

      Intel планшет

      для Андроида нужно включить разрешения (permission)
      Ссылка на GitHub
    • От Vitaldj
      Коллеги, как то был задан вопрос в теме: 
      Так вот, вроде Берлин обещал работать с заправленными архивами zip. Поискал в доках, нашел только это упоминание про работу с разархивированием запароленных. тут
      Но не слова про создание запароленных архивов. Есть ли инфа по этому поводу? Поисковые сервера не помогли(((
  • Последние посетители   0 пользователей онлайн

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

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