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

Xcode *

Интегрированная среда разработки ПО

Сначала показывать
Порог рейтинга
Уровень сложности

Тюнинг Swift компилятора. Часть 1

Время на прочтение5 мин
Количество просмотров12K

image


Обзор Swift 3 компилятора и способы его ускорить. Часть 1.
Развенчание существующих мифов. Мнение о проблемах autocompletion в Xcode.


Читать дальше →
Всего голосов 24: ↑22 и ↓2+20
Комментарии44

Реализация интерфейса с выдвижной панелью в iOS приложении

Время на прочтение6 мин
Количество просмотров14K
В сегодняшней статье мы расскажем о приемах и инструментах, которыми пользовались разработчики из Everyday Tools при работе над интерфейсом с выдвижной панелью, или, говоря проще, «шторкой». Шторки — оптимальное решение для приложений, в которых пользователь взаимодействует преимущественно с главным экраном, но периодически нуждается в быстром доступе к дополнительной информации.


Читать дальше →
Всего голосов 14: ↑13 и ↓1+12
Комментарии6

Система сборки Xcode: advanced tutorial

Время на прочтение7 мин
Количество просмотров40K
image
Конфигурация проекта в Xcode выглядит, как пульт управления космическим кораблем. Зачастую люди понимают, как работает система сборки, но путают термины. В этой статье мы пройдемся по структуре проекта, таргетам, настройкам конфигураций и воркспейсам. Поехали!
Читать дальше →
Всего голосов 23: ↑23 и ↓0+23
Комментарии3

Почему нам нужен Delegate в iOS и WatchOS?

Время на прочтение8 мин
Количество просмотров14K
Около двух лет назад кто-то задал мне хороший вопрос: «Почему нам нужны делегаты для UIViewControllers?» Он думал, что Swift многое облегчил, но вся эта штука с делегатами кажется очень сложной. Почему просто нельзя посылать сообщения или инициализации между классами?

Когда я впервые изучал iOS, я признал, что у меня ушли месяцы, чтобы понять, что произошло с делегацией. Я нашел много непонятного кода и немного объяснений. Когда я работал над этим, результата было мало. В большинстве случаев туториалы ссылались на информацию о том, как использовать стандартный делегат Apple, но не показывали, как создавать свой отклик. Эти отклики необходимы для полного понимания делегатов.

Я решил, что время обновить статью и включить два примера с которыми разработчики могут столкнуться: iOS и watchOS версии. Вместе с взрослением watchOS в watchOS 3, я думаю, многие разработчики начнут смотреть в сторону разработки приложений для часов и там могут столкнуться с непонятными вещами.

Что такое Class?


Давайте начнем с начала, что бы все понимали проблему. До тех пор, пока мы используем классы в объектно-ориентированном программировании, стоит хорошо понимать, что они из себя представляют. Class — это коллекция данных, которые мы называем properties (свойства) и действий methods (методы) к properties.
Читать дальше →
Всего голосов 17: ↑12 и ↓5+7
Комментарии7

Истории

Xcode: наверное, лучший способ работы со сторибордами

Время на прочтение5 мин
Количество просмотров50K

Этот пост является вольным переводом статьи Xcode: A Better Way to Deal with Storyboards by Stan Ostrovskiy


Некоторые примеры кода в оригинальной статье устарели (ввиду выхода Swift 3) и в переводе были изменены.


Советы и рекомендации по работе с Interface Builder.


Apple серьезно улучшили Interface Builder в новом Xcode 8. Использование size classes стало более интуитивным, возможность масштабирования сториборда — очень удобной, а полное превью прям в Interface Builder — просто великолепным. Для тех у кого были сомнения насчет использования Interface Builder, это может стать хорошими плюсами.


С другой стороны, у многих разработчиков все еще есть некоторые проблемы с Interface Builder когда они создают большие многоэкранные приложения со сложной навигацией.


В этой статье я поделюсь некоторыми из лучших практик для работы со сторибордами в вашем проекте. Вы уже пользуетесь Interface Builder, или только делаете первые шаги в этом направлении? — в любом случае, эти советы будут полезны для вас.


1. Если вы работаете в команде, используйте отдельный сториборд для каждого экрана. Даже если вы работаете один — это наверняка станет хорошей привычкой.

В вашем проекте есть один файл main.storyboard, который выглядит вот так?



С точки зрения дизайнера, все хорошо: полностью видно UI и навигацию. И это именно то, для чего Interface Builder и был создан.

Но для разработчика это несет множество проблем:

Читать дальше →
Всего голосов 22: ↑22 и ↓0+22
Комментарии48

Основы Auto Layout — Концепция, строение, применение

Время на прочтение4 мин
Количество просмотров73K
Auto Layout занимается динамическим вычислением позиции и размера всех view в view иерархии, на основе constraints — правил заданных для того или иного view. Самый большой и очевидный плюс для разработчика в использовании Auto Layout в том, что исчезает необходимость в подгонке размеров приложения под определенные устройства — Auto Layout делает это за вас, динамически изменяя интерфейс в зависимости от внешних или внутренних изменений.

Примером внешних изменений может быть: Изменение размера окна в macOS, изменение ориентации экрана, различные размеры экранов.

Пример внутренних изменений: Изменение контента в окне, изменения в зависимости от языка и т.д.

Создать свой интерфейс можно 3-мя способами: программно, на основе маски, которая автоматически подстраивается под изменения или использовать Auto Layout.

Отличие Auto Layout от других способов в том, что вам больше не нужно писать код, который изменяет интерфейс в зависимости от размера окна и других элементов, вместо этого Auto Layout самостоятельно вычисляет расположение элемента интерфейса в приложении и изменяет его относительно окружения.
Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Комментарии7

Заряжаем Xcode

Время на прочтение3 мин
Количество просмотров24K


Этот пост является вольным переводом статьи Xcode, Supercharged.

Для нас, как инженеров, очень важно привыкнуть к инструментам, которые мы используем в работе каждый день, но никогда не стоит останавливаться на их изучении. Всегда найдутся скрытые возможности, которые помогают нам работать быстрее и концентрироваться на цели, а не на средствах ее достижения. Я покажу некоторые «фишки», которые обнаружил за время своей работы в среде разработки Xcode. Надеюсь, они и вам пригодятся.

1. Ctrl + цифры

В Xcode есть быстрая навигация по всему проекту: от корневого каталога до файлов и методов в них. Просто нажмите Ctrl + цифры от 1 до 6 и сами увидите. В появляющихся окнах также работает поиск.



2. «Фишки» брэйкпоинтов
Читать дальше →
Всего голосов 28: ↑26 и ↓2+24
Комментарии22

Как отметить свои TODO, FIXME и ERROR в Xcode

Время на прочтение3 мин
Количество просмотров17K

Этот пост является вольным переводом статьи How to highlight your TODOs, FIXMEs, & ERRORs in Xcode by Hector Matos


Это был самый обычный день: я писал код, устранял баги и вообще все было прекрасно. Именно тогда я написал блок кода, к которому нужно было вернуться позже. Это обычный случай, с которым вы тоже вероятно сталкивались: нужно было взаимодействовать с API который еще не был готов. Я знал общую структуру объекта, который получу по API, но я еще не мог протестировать работу с ним. Как и любой другой разработчик, я написал комментарий, который выглядит так:



В этот момент я хотел бы создать предупреждение в Xcode, такое же как мы привыкли делать в Objective-C с помощью директив компилятора:



Но увы, так не получилось и я загрустил.


Читать дальше →
Всего голосов 24: ↑21 и ↓3+18
Комментарии7

[iOS 10] Встраиваем поддержку Siri в свое iOS приложение

Время на прочтение5 мин
Количество просмотров20K
image

Apple показала на WWDC 2016 новые iOS 10 и macOS Sierra, и я не упустил возможность сразу же обновить свои устройста.

Одно из ключевых обновлений — появление SiriKit для разработчиков, теперь у нас с вами есть возможность использовать Siri в собственных приложениях. И мы сегодня сделаем наше первое приложение с поддержкой Siri (исходники проекта в конце статьи)
Читать дальше →
Всего голосов 20: ↑16 и ↓4+12
Комментарии19

Apple, боль и сертификаты

Время на прочтение6 мин
Количество просмотров38K
Знакомьтесь, Боб — матёрый ios разработчик, Алиса — не менее матёрая тестировщица. Дело было вечером дело было в пятницу. Боб дофиксил багу, вроде бы протестил на своих девайсах. Затем Боб запускает уже отточенные до автоматизма команды:

git checkout develop
git merge bug_fix_#999
git checkout master && git merge develop --no-ff ....
git push ....


На пуш на сервере срабатывает jenkins/teamcity/travis, который запускает билд. В это же самое время наш Боб пишет Алисе, что скоро пойдет домой, и хочет, чтобы аппа ушла сегодня в app store на апрув, дабы выиграть лишние пару дней, так как на носу выходные, если, конечно, приложение пройдет ручное тестирование Алисы.

Приложение Боба довольно обычное: пару сотен компилируемых класс файлов, еще с десяток cocoapods зависимостей ну и кучка сторибордов — Боб ценит своё время и время коллег поэтому не пишет UI в коде. Боб знает, что его приложение с чистого старта на сервере собирается за 4 минуты для develop версии, которое идет на тест Алисе, и столько же или чуть больше для production версии. Боб также знает, что ему нужно около 10 минут, чтобы дождаться окончания полной сборки и затем сообщить Алисе, что она может приступать к тестированию. Боб человек ответственный, поэтому по истечении 10 минут после пуша проверяет статус билда, так как знает, что сервер — это отдельный параллельный мир со своими правилами, законами и странностями.

Пятница, вечер, Боба отделяет от долгожданных выходных только 10 минут, после которых передаст эстафету Алисе. Боб вбивает в сафари bobcompany.ci/dashboard, где видит красную лампочку напротив своего приложения, глаза Боба потускнели, разочарованию не было предела. Боб жмет на show more, где его встречает ошибка:

Code Sign error: No codesigning identities found: No codesigning identities (i.e. certificate and private key pairs) that match the provisioning profile specified in your build settings (“com.company.bob”) were found.


Тут нервы Боба совсем сдают:



Удастся ли Бобу решить проблему?
Всего голосов 29: ↑27 и ↓2+25
Комментарии27

Swift 3.0, много шума, а что на деле?

Время на прочтение5 мин
Количество просмотров38K


В начале мая на просторах интернета разработчики языка объявили, что начинают подготовку к релизу 3.0 версию языка. Разработка 3.0 идет в мастер ветке, по релизам, можно понять, что 3-го мая был релиз Swift 2.2.1. Затем туда же начали вливать изменения касательно 3-ей версии языка. 9-го мая уже появился первый developer релиз из того же мастера, который можно накатить на последний xcode через установщик из swift.org/download/#snapshots, который включается через Preferences -> Components -> Toolchains.

Немного общей информации о будущем релизе

Читать дальше →
Всего голосов 23: ↑19 и ↓4+15
Комментарии40

Objective-C, static libraries, categories, -ObjC, боль…

Время на прочтение7 мин
Количество просмотров10K
Не всем повезло писать приложения полностью на Swift, да и еще под ios 8+ онли. Много легаси на Objective-C, много зависимостей идет через статик либы, ни cocoapods, ни carthage, всё ручками. Мы же крутые девелоперы, поэтому строго следуем DRY и все реюзабельные вкусшянки выносим либо в отдельные проекты, либо в статик библиотеки. Сейчас рассмотрим случай, когда мы сделали классную статичную библиотечку с не менее прикольным апи, и хотели бы поделиться с товарищами по цеху внутри компании — на вики ресурсе/гите выложить архивчик с либой, хедерами и, конечно же, ридмиком где описан весь апи и как им пользоваться.

Для примера ради рассмотрим один класс + его категорию



Читать дальше →
Всего голосов 12: ↑11 и ↓1+10
Комментарии8

Встраиваем pre-built dylib в приложение

Время на прочтение4 мин
Количество просмотров8.9K

Перед началом майских праздников я провел 5 плотных дней за написанием приложения под iOS и Mac для конкурса. Разработка шла планомерно, к последнему дню работа приложения меня начала более-менее удовлетворять. Я решил отложить отправление на утро самого последнего дня, чтобы сделать это со свежой головой (там нужно было еще приложить текстовое описание). Утром, за несколько часов до поезда в отпуск, я сел и со спокойной душой сделал финальную обкатку основного функционала. И тут мне показалось хорошей идеей потестить, как будет вести себя приложение на абсолютно другой машине, на которой не велась разработка. Я архивирую свое приложение, перекидываю его на другой Mac и… оно не запускается. С супер-информативной ошибкой "Image not found" и путём явно указывающим на проблему с dylib. Итак: 3 часа до поезда и не запускающиеся по непонятным причинам приложение. Почему это произошло, как этого можно было бы избежать и как я справился с этой проблемой — обо всём этом под катом.

Читать дальше →
Всего голосов 6: ↑6 и ↓0+6
Комментарии6

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань

MSLibrary. ПРОСТО: объявляем глобальные переменные с помощью класса singleton, для iOS и не только…

Время на прочтение3 мин
Количество просмотров3.1K
Разработчики библиотеки MSLibrary for iOS продолжают серию очень компактных статей, посвященных тому как ПРОСТО реализовать ту или иную функцию. Никакой теории, только практика…

Итак, как правильно объявить глобальные переменные? Под глобальными мы понимаем переменные, объявленные на внешнем уровне (не static) и имеющие глобальное время жизни.

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

NSString *myGlobalVariable;

а затем импортируем файл MyClass.h с помощью директивы #import в несколько файлов, например, MyClass1.h, MyClass2.h, MyClass3.h и MyClass4.h, то в результате с большой вероятностью получим примерно такое сообщение об ошибке:

duplicate symbol _myGlobalVariable in:
    /Users/L/Library/Developer/Xcode/DerivedData/…/MyClass.o
    /Users/L/Library/Developer/Xcode/DerivedData/…/MyClass1.o
duplicate symbol _myGlobalVariable in:
    /Users/L/Library/Developer/Xcode/DerivedData/…/MyClass.o
    /Users/L/Library/Developer/Xcode/DerivedData/…/MyClass2.o
duplicate symbol _myGlobalVariable in:
    /Users/L/Library/Developer/Xcode/DerivedData/…/MyClass.o
    /Users/L/Library/Developer/Xcode/DerivedData/…/MyClass3.o
duplicate symbol _myGlobalVariable in:
    /Users/L/Library/Developer/Xcode/DerivedData/…/MyClass.o
    /Users/L/Library/Developer/Xcode/DerivedData/…/MyClass4.o

ld: 4 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Произойдет это по тому, что в результате импорта переменная myGlobalVariable будет объявлена в каждом из подключенных файлов.
Читать дальше →
Всего голосов 10: ↑3 и ↓7-4
Комментарии7

Сертификация в Apple Developer Center простым и понятным языком

Время на прочтение12 мин
Количество просмотров137K

Кратко о главном


В Apple Developer Center с незапамятных времен применяется довольно мудреная система сертификации ваших приложений на каждом из ключевых этапов — разработка, тестирование и публикация.

Зачастую при первом погружении в эту систему у начинающих (и не только) разработчиков возникают серьезные проблемы с пониманием того, как функционирует Apple Developer Center (будем называть его «девцентр» для простоты). В результате, мне в процессе профессиональной деятельности не раз приходилось наблюдать на новых местах работы огромные свалки из профилей и сертификатов в девцентре, в результате чего приходилось приступать к «разбору завалов».

При этом, в сети довольно не такой большой выбор материалов на эту тему. Конечно, в официальной документации Apple все хорошо структурировано и очень подробно описано, но зачастую просто не хватает времени на изучение такого количества материала. Как правило, хочется быстро понять, что именно и в каком порядке нужно сделать для корректной работы приложения на этапах разработки, тестирования и при публикации его в магазин App Store. В русском же сообществе подобных материалов, собранных в одном месте и в удобном доступе, я не видел вовсе, поэтому и решил написать эту статью. Для всех интересующихся — добро пожаловать под кат.
Читать дальше →
Всего голосов 25: ↑22 и ↓3+19
Комментарии17

Анатомия редакторов документов: общий код для онлайн и оффлайн-версий редакторов ONLYOFFICE

Время на прочтение5 мин
Количество просмотров10K
Если бы кто-то спросил нас, какой сегодня день, мы бы ответили, что сегодня Большой День. День, когда мы наконец-то релизим десктопные редакторы ONLYOFFICE. Tе самые, что работают без браузера/интернета и отправляют документ прямо на принтер.

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

Главная черта наших десктопных редакторов в их родстве с  онлайн-редакторами  — их объединяет общий исходный код. В этой статье мы немного расскажем, почему мы приняли решение делать десктопы именно таким образом и раскроем секреты их анатомии, а именно — чем они отличаются от онлайн-версии, как устроены и что мы планируем поменять в будущем.


Читать дальше →
Всего голосов 15: ↑14 и ↓1+13
Комментарии44

MSLibrary. Создание и компиляция кроссплатформенных (универсальных) библиотек в Xcode

Время на прочтение14 мин
Количество просмотров6.1K
Очередная статья от команды разработчиков библиотеки MSLibrary for iOS посвящена довольно популярной теме создания и компиляции кроссплатформенных библиотек.

Библиотеки хороши тем, что позволяют использовать разработанный ранее программный код в различных программах. Таким образом, программисты могут существенно упростить себе работу и сократить время ее выполнения, воспользовавшись для части стандартного функционала готовыми решениями, которые входят в состав библиотек. В статье рассматриваются только статические библиотеки, код которых при компиляции полностью входит в состав исполняемого файла, что делает программу легко переносимой.

Мы постарались как можно подробнее и систематичнее осветить вопрос, рассмотрев создание библиотеки «с нуля» и упаковку в библиотеку части функционала уже готового проекта. Под кроссплатформенностью или универсальностью мы подразумевали совместимость библиотеки как с симуляторами, работающими на процессоре с архитектурой i386 или x86_64, так и с реальными девайсами, процессор которых, вероятнее всего, имеет архитектуру armv7 или armv64.

1. Создаем проект библиотеки


При разработке библиотеки перед разработчиком может быть два пути, первый — библиотека создается «с нуля» и второй — в вашем проекте есть некий функционал, на основе которого вы хотите создать библиотеку. Рассмотрим оба.
Читать дальше →
Всего голосов 10: ↑8 и ↓2+6
Комментарии3

1.4 SFML и Xcode (Mac OS X)

Время на прочтение5 мин
Количество просмотров13K


От переводчика: данная статья является четвертой в цикле переводов официального руководства по библиотеке SFML. Прошлую статью можно найти тут. Данный цикл статей ставит своей целью предоставить людям, не знающим язык оригинала, возможность ознакомится с этой библиотекой. SFML — это простая и кроссплатформенная мультимедиа библиотека. SFML обеспечивает простой интерфейс для разработки игр и прочих мультимедийных приложений. Оригинальную статью можно найти тут. Начнем.
Читать дальше →
Всего голосов 12: ↑9 и ↓3+6
Комментарии0

Подключение SQLite к мобильному приложению iOS через FMDB на Xcode используя Swift

Время на прочтение7 мин
Количество просмотров18K
Столкнувшись с задачей подключить SQLLite к своему мобильному приложению iOS через FMDB, я не нашел ни одного актуального гайда на русском языке. И тем более для Swift. В этой статье я постараюсь этого исправить.

В этом гайде будут использоваться файлы с objective-c, поэтому не надо ждать порта FMDB на Swift.

Скачать FMDB можно тут.

В FMDB три main class:

FMDatabase — представляет данных SQLite. Используется для выполнения SQL-операторов.
FMResultSet — представляет результаты выполнения запроса по FMDatabase.
FMDatabaseQueue — если вы хотите, чтобы выполнялись запросы и обновления на несколько потоков, можно использовать этот класс. Пример в 8 пункте.

Прежде чем вы сможете взаимодействовать с базой данных, она должен быть открыта. Открытие завершиться с ошибкой, если нет достаточных ресурсов или разрешения на открытие и/или создания базы данных.

if (![db open]) {
    [db release];
    return;
}

Шаги:
Читать дальше →
Всего голосов 11: ↑10 и ↓1+9
Комментарии18

Реализуем свой dropDown ViewController (aka iOS 8 Mail app) в 200 строк

Время на прочтение7 мин
Количество просмотров13K
Еще с beta версии iOS 8 мне очень понравилась эта новая фича приложения почты: при создании нового письма можно просто смахнуть это окно вниз и продолжить работу на предыдущем экране. Не уверен, насколько эта фича оказалась полезной конкретно в этом приложении, но идея то отличная! В тот же вечер я сел делать подобную штуку, и таки сделал свой велосипед, и на время забыл об этом.

Недавно мне понадобился похожий функционал. Не захотев брать свое старое решение, и не найдя готовой реализации, которая бы мне понравилось, было решено написать свое. Что из этого получилось, с какими трудностями пришлось столкнуться, и что нового было вынесено — под катом.

image
Читать дальше →
Всего голосов 10: ↑9 и ↓1+8
Комментарии13