Включение другого .app в приложение target c

Вот ситуация. Я создал приложение, используя nw.js, и это здорово, потому что мне нравится использовать html, css и javascript. Однако теперь я хотел бы продать это приложение. Что я хотел бы сделать, так это сделать небольшое приложение-оболочку в Objective-C, которое будет проверять серийный номер пользователя и обеспечивать некоторый уровень защиты от копирования. На мой взгляд, я представляю себе приложение, которое было бы в Objective-C. Это запустит и проверит пользователя, а затем, если пользователь будет законным, он распакует некоторые важные файлы в пакет nw.js и запустит это приложение.

Теперь исполняемый файл nw.js уже находится в пакете приложения, и я хотел бы вложить этот пакет в пакет target-c, а затем запустить его в нужное время. Может ли кто-нибудь посоветовать, возможно ли это, и если нет, то как еще я могу решить проблему, чтобы защитить свое приложение.

Спасибо за любую помощь.


person JohnBo    schedule 14.02.2017    source источник
comment
Это не очень полезно. Кроме того, никакая защита от копирования не является непревзойденной, это больше о том, чтобы сделать ее менее удобной для взлома, чем для покупки.   -  person JohnBo    schedule 15.02.2017


Ответы (3)


С этим проблем нет, и такое вложение приложений довольно распространено в OS X (поскольку вы говорите «.app», я предполагаю, что это OS X, а не iOS. Это невозможно на iOS). Я сомневаюсь, что он будет особенно эффективен в качестве механизма защиты от копирования, но это полностью другой вопрос (см. ссылки на несколько дискуссий по этой теме).

На вопрос «что было бы высокоэффективным?» к сожалению, ответ таков: «Если вам нужно спросить о переполнении стека, то ничто из того, что вы делаете, вряд ли будет высокоэффективным; сделайте что-нибудь простое и двигайтесь дальше». Это не значит, что вы плохой программист или что-то в этом роде; просто защита от копирования — это игра в запутывание, и если вы используете вещи, которые вы нашли на Stack Overflow, они, вероятно, не настолько запутаны. Все, что вы придумали за неделю, вероятно, не так уж запутано. И если вы придумаете что-то действительно хорошее, вам все равно придется регулярно обновлять его каждый раз, когда оно выходит из строя. У Apple есть целая команда, занимающаяся этим, и они контролируют каждую часть системы, включая аппаратное обеспечение, и до сих пор существуют джейлбрейки.

Опять же, это не значит, что вы ничего не можете сделать. Возможно, вы можете остановить нескольких человек, особенно если ваше приложение не очень интересное. Но не тратьте на это слишком много времени, потому что это не будет так эффективно. (Если это действительно важно для вашего бизнес-плана, вам следует изучить коммерческие решения. У меня нет рекомендаций, но я готов потратить немного денег и обновляться до новых версий по мере их неудачи.)

Тем не менее, вложение приложений не сложно.

Сделайте «подприложение» зависимостью вашей цели.

Добавьте в сборку новую фазу «Копировать файлы»:

введите здесь описание изображения

Установите пункт назначения «Исполняемые файлы» и перетащите пакет приложений сюда:

введите здесь описание изображения

Когда вам нужно запустить его, просто найдите его с помощью NSBundle.pathForResource:..., а затем запустите с помощью NSTask.

person Rob Napier    schedule 06.03.2017

Нет, вы не можете включить другое .app в приложение Objective C!
Нужно создать нативное приложение с нуля.

person ystack    schedule 14.02.2017
comment
Но почему нет? Я только что провел несколько экспериментов и смог включить пакет приложения в проект xcode, просто скопировав его в папку приложения во время его сборки. Таким образом, это должно быть просто выполнение приложения, конечно. Сам мой проект nw.js уже содержит три дополнительных файла .app, которые необходимы для работы фреймворка. Но как мне выполнить это из приложения какао, вот они и спрашивают. - person JohnBo; 16.02.2017
comment
Это просто неправильно. Вы абсолютно можете встраивать приложения в другие приложения на OS X. Это делается постоянно. Посмотрите на /Applications/iTunes.app/Contents/MacOS/iTunesHelper.app один из многих примеров. - person Rob Napier; 06.03.2017

На самом деле я бы рекомендовал другой подход. ЕСЛИ вы хотите иметь некоторый уровень защиты от копирования, вы должны использовать nwjc для компиляции частей вашего кода в двоичный код. Я объясню это вам.

  1. Структурируйте свое приложение таким образом, чтобы некоторые части приложения можно было защитить с помощью nwjc. Вам не нужно защищать все. Только те части, которые трудно воспроизвести. Имейте в виду, что с этим кодом вы теряете производительность на 30%. Обычно это не распознается, но может быть, если у вас большие части кода.

  2. Минимизируйте свой код. Я использую юикомпрессор. Он удаляет все комментарии из вашего кода и минимизирует его. Таким образом, другому человеку будет очень сложно, если не невозможно, прочитать ваш код. Это также повышает производительность вашего кода.

Вы можете добавить приложение в качестве цели в свой проект Objective-C (я сделал это в своем быстром проекте) и выполнить эту установку. Но имейте в виду. Как только ваше приложение загружает код в приложение nwjs, подпись кода нарушается, и другой человек может снова прочитать этот код. Пока работает nwjs, вы не можете полностью защитить код. Поэтому вам нужно использовать nwjc и минимизировать ваши js. Вы также можете испортить свой js, чтобы сделать его еще более нечитаемым.

Еще один вопрос, который вы должны задать себе. Неужели мой код настолько особенный, что никто не может его воспроизвести? Если кто-то хочет украсть что-то у вас, это в основном инновации. Они сделают свой фреймворк и напишут свой код. Хорошие программисты могут воспроизвести любой код независимо от того, защищен он или нет. Они просто анализируют вход и выход. Так что, пока у вас нет сумасшедших математических алгоритмов, я сомневаюсь, что кто-то захочет их украсть, если они смогут их воспроизвести. И даже если у вас сложный код. Защита частей с помощью nwjc, минимизация и uglyfing сделает невозможным его чтение. Иногда у нас возникают проблемы с чтением собственного кода ;)

person Silve2611    schedule 06.03.2017