Как стать автором
Обновить
17
0

Пользователь

Отправить сообщение
Я уже им писал bug report полгода назад.
Обещали рассмотреть. Однако у меня до сих пор команды не оповещаются.
Самое главное забыл…

>>> tempBuildDir=$projectDir/build

Вы не учли что результаты сборки могут находиться в системной папке «Derived Data». Это поведение по умолчанию для xCode >= 4.0. Поэтому для таких проектов ваш script не будет работать.

Посмотрите в сторону переменной $BUILT_PRODUCTS_DIR (доступна только в «Run script» фазе. Для script-ов, запущенных из shell отсутствует)
Для подобных вещей в соответствующий target добавляется фаза «Run script». А уж в ней делаете что вашей душе угодно.

В общем, полностью согласен с lymes.
Хорошая статья. Однако есть пара замечаний.

1. Для автоматизации средствами hudsn/jenkins есть
* TestFlight plug-in — wiki.jenkins-ci.org/display/JENKINS/Testflight+Plugin
* xCode plug-in — wiki.jenkins-ci.org/display/JENKINS/Xcode+Plugin

2. вместо «iphoneos5.0» можно указать «iphoneos». Тогда подхватит default SDK для текущего xCode.

3. При использовании /usr/bin/xcrun «sign», «embed» в настройках *.xcodeproj должно быть указано «don't codesign». Иначе script выдаст ошибку на этом этапе. Справедливо для xCode >= 4.0

4. в TestFlight upload API не работает флаг «notify=True». То есть, нужно все равно заходить и руками оповещать свою команду.

P.S. Я еще смог прикрутить автоматический запуск GHUnit тестов и выбор версии xCode (beta vs stable). Если интересно — смотрите по ссылкам ниже.
1. Пример CI, работы с библиотеками и создания своих framework-ов — github.com/dodikk/iContiniousIntegration
2. Презентация об iPhone CI — github.com/EmbeddedSources/iOS-articles/blob/master/3-iContiniousIntegration/ciPresentation.pdf?raw=true

Сори что не по теме, перечитывал статью — наткнулся на «значниею», поправьте плиз.
И да, статья была очень кстати. Спасибо большое за перевод.
никогда не заново не запускается
— думаю тут лишнее «не». Поправьте плиз.
>> #import «CoreData+ActiveRecordFetching.h»

Да. И импорты для сторонних библиотек желательно писать вот в таком стиле:
#import <ActiveRecordLibrary/CoreData+ActiveRecordFetching.h>
Пример добавления библиотеки методом «drag-and-drop исходников» неверен и антипедагогичен.

Правильней было бы создать static library project, сделать «drag-and-drop исходников» в него. А потом включать в проект и линковать уже эту библиотеку.
Кроме того, приведенный фрагмент на ассемблере по сути вызывает ту же запрещенную ptrace/syscall. Следовательно, за такое все-таки могут изгнать.
Или здесь расчет на то что если не найдут злоумышленники, то уж цензоры и подавно?
Спасибо за разъяснения. Однако возникла еще пара вопросов

1. Есть ли proof того что код iPref использует подобные техники?
(Для варианта «открой и посмотри в IDA я слишком ленив» ).

2. Известны ли вам открытые или коммерческие средства защиты ( вроде WinLicense ), поддерживающие iOS? (я пока что о таковых не слыхал).
Уважаемый int_0x80, а за подобную защиту из AppStore не изгоняют?
Поделитесь, пожалуйста, своим опытом ежели таковой имеется.
как дебажить unit tests, созданные на основе SenTestingKit?
Пользуюсь такой вот реализацией этого паттерна: MulticastDelegate.
Из преимуществ по сравнению с NSNotificationCenter —
1. автоматическая отписка observer-а при его удалении из памяти ( если забыли отписатся от оповещений в методе dealloc — не беда, отписка произойдет автоматически )
2. Поддержка произвольной сигнатуры метода оповещения, то есть можно нотифицировать так —

[ self.observers gameState: self didUpdateScore: self.score ];
Хотелось бы узнать точные технические характеристики, в чем конкретно новшество, какая ось и тп.
Здесь немножко больше об этом: utube, presentation и github
В наших проектах это делается приблизительно так:

//ассинхронная подгрузка данных по URL
JFFAsyncOperation loader_ = dataURLResponseLoader( url_ );
//ассинхронная подгрузка и кеширование в проперти NSMutableDictionary с именем images
JFFPropertyPath* property_path_ = [ JFFPropertyPath propertyPathWithName: @"images" key: url_ ]
loader_ = [ self asyncOperationForPropertyWithPath: property_path_ asyncOperation: loader_ ];

//пример использования
[ self.activityIndicatorView startAnimating ];
loader_( nil, nil, ^( id result_, NSError* error_ )
{
  self.imageView.image = result_;
  [ self.activityIndicatorView stopAnimating ];
} );
Блин — мне тоже снились, после прочтения.
Еще бы, не один же я блоки люблю использовать :).
Спасибо за статью-перевод, она позволила мне почувствовать что я не одинок в своих взглядах на современную IT индустрию и подготовку специалистов.

Информация

В рейтинге
Не участвует
Откуда
Днепр, Днепропетровская обл., Украина
Дата рождения
Зарегистрирован
Активность