2013-11-25 6 views
2

Я создал на приложении приложений JavaFX в Mavericks и подписание с Xcode 5.0.2 с помощью -Как сохранить свойство alias при подписании приложения?

codesign --deep -s "my name" MayApp.app 
codesign -v MayApp.app && echo MayApp.app is Signed Successfully! 

БЕЗ SIGN MYAPP СПУСКОВОГО FINE !!

Без использования --deep, я не могу подписывать приложение в Mavericks.

- Больше Try -

Сейчас в Mavericks, мы больше не можем подписать пакет, если любой вложенный пакет в пакете, не подписан. Я подписать рамки моего приложения, следуя инструкции, записанные в - http://furbo.org/2013/10/17/code-signing-and-mavericks/

codesign --verbose --force --sign "my name" MyApp.app/Contents/PlugIns/jdk1.7.0_21.jdk 

рамки подписания команды самостоятельно или после подписания рамки, не вносят никаких изменений в приложении подписи.

------ ГЛАВНЫЙ ВОПРОС ------

При управлении выше команд (будь то только подписать приложение или вместе с рамочным подписания), MyApp.app получить успешно подписаны, но что приложение не запускается на Mac из-за команды подписи, не сохраняющей свойство ALIAS для файла libjli.dylib, которые существуют на - MyApp.app/Contents/PlugIns/jdk1.7.0_21.jdk/Contents/MacOS. Подписание кода приложения конвертирования libjli.dylib псевдоним в динамическую библиотеку.

Потом я подумал о копировании libjli.dylib с помощью следующей команды -

<target name="Copylib" depends="SigningApp"> 
<delete file="MyApp.app/Contents/PlugIns/jdk1.7.0_21.jdk/Contents/MacOS/libjli.dylib"/> 
<exec executable="cp"> 
    <arg line="-R /Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/MacOS/ MyApp.app/Contents/PlugIns/jdk1.7.0_21.jdk/Contents/MacOS"/> 
</exec> 
</target> 

Это сохранение псевдонима, но теперь на проверке знака приложение говорит -

admins-iMac:osx admin$ codesign -v -v MyApp.app 
MyApp.app: code object is not signed at all 
In subcomponent: MyApp.app/Contents/PlugIns/jdk1.7.0_21.jdk 
In architecture: x86_64 

То же произойдет, если я копирую, что псевдоним вручную на MyApp.app.

Просьба предложить любой способ подписания приложения с сохранением свойств всех файлов в моей структуре при - Содержание/PlugIns/jdk1.7.0_21.jdk?

Благодаря

ответ

3

Моя проблема разрешится путем обновления Java от jdk7u21 до последней jdk7u45, потому что Oracle, Java версии 7u25 и ниже, были отключены от компании Apple на OS X. Обновление до последней версии позволит Java будет работать на Mac OS X.

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

  1. в MyApp.app/Contents/Info.plist для CFBundleExecutable - MyApp, CFBundleIconFile - MyApp.icns.
  2. нужно скопировать /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/MacOS/libjli.dylib в MyApp.app/Contents/PlugIns/jdk1.7.0_45.jdk/Содержание/MacOS для libjli.dylib псевдоним.
  3. Нам также необходимо скопировать /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Info.plist от системы установлена ​​JDK нашей MyApp.app/Contents/PlugIns/jdk1.7.0_45.jdk/Содержание/

Примечание: Шаг 2 и 3 необходимы, поскольку по развертыванию JavaFX приложение, процесс развертывания только копирование /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home по умолчанию в MyApp.app/Contents/PlugIns, это был пропуск MacOS/folder и Info.plist.

Не делая эти вышеуказанные изменения для подписания приложения с -

codesign --deep -s "my name" MayApp.app 

я получал erron при подписании - MyApp.app: расслоением формат непризнанным, недействительным, или непригодны - Мы столкнулись этот вопрос таким образом, мы необходимо определить, что делает формат пакета приложений непризнанным, недействительным или неподходящим.

Благодаря

+0

Интересно, применимо ли это решение к моему делу, пытаясь подписать приложение java под горным львом. Он продолжает говорить: «Код уже подписан», но при проверке он говорит о недопустимом подписанном атрибуте .. :(Я сообщу здесь о результате после обновления JDK – swdev

+0

@swdev, пожалуйста, дайте мне знать, что такое версия xcode и java на вашей горе Lion OS X до обновления? –

+0

Спасибо за ответ Neelam, решение довольно просто. Я просто использую 'codesign -f -s 'Eko Wibowo'', заставляя его подписывать, относительно того, подписан ли пакет или нет. Фактически, Я не подписал его, но использование этой опции '-f' решило проблему! – swdev

0

я все еще получаю ошибку после применения метода обхода предложил. Когда есть символическая ссылка, проверка приложения не проходит. Используется spctl -a -v MyApp.app командной строки для проверки пакета.

Я углубился и обнаружил, что метод GetJREPath основан на местоположении файла libjli.dylib. Как только он переместится в папку Contents/MacOS /, все сломается. Я немного изменил метод GetJREPath и перестроил JDK из источников. Вот разница файл, чтобы применить его к вашей сборке:

diff -r ff67c8965852 src/macosx/bin/java_md_macosx.c 
--- a/src/macosx/bin/java_md_macosx.c Wed Dec 11 11:19:00 2013 -0800 
+++ b/src/macosx/bin/java_md_macosx.c Wed Dec 18 17:33:29 2013 +0400 
@@ -640,7 +640,7 @@ 
     return JNI_FALSE; 
    } 

- const char lastPathComponent[] = "/lib/jli/libjli.dylib"; 
+ const char lastPathComponent[] = "/Contents/MacOS/libjli.dylib"; 
    size_t sizeOfLastPathComponent = sizeof(lastPathComponent) - 1; 
    if (pathLen < sizeOfLastPathComponent) { 
     return JNI_FALSE; 
@@ -648,7 +648,11 @@ 

    size_t indexOfLastPathComponent = pathLen - sizeOfLastPathComponent; 
    if (0 == strncmp(realPathToSelf + indexOfLastPathComponent, lastPathComponent, sizeOfLastPathComponent - 1)) { 
-  realPathToSelf[indexOfLastPathComponent + 1] = '\0'; 
+  realPathToSelf[indexOfLastPathComponent + 10] = 'H'; 
+  realPathToSelf[indexOfLastPathComponent + 11] = 'o'; 
+  realPathToSelf[indexOfLastPathComponent + 12] = 'm'; 
+  realPathToSelf[indexOfLastPathComponent + 13] = 'e'; 
+  realPathToSelf[indexOfLastPathComponent + 14] = '\0'; 
     return JNI_TRUE; 
    } 

Здесь строит и инструкции по упаковке для OpenJDK7: https://github.com/hgomez/obuildfactory/wiki/Building-and-Packaging-OpenJDK7-for-OSX

Я заполнил ошибку в Oracle, а также. Надеюсь это поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^