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

Objective C *

Компилируемый объектно-ориентированный язык

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

Совместимый с «Objective-C» «Swift»-код

Время на прочтение8 мин
Количество просмотров24K
Хоть Apple и написали, казалось бы, подробную документацию о том, как можно использовать «Swift»-код внутри «Objective-C»-приложения (и наоборот), но, когда доходит до дела, этого почему-то окаывается недостаточно. Когда у меня впервые появилась необходимость обеспечить совместимость фреймворка, написанного полностью на «Swift», с «Objective-C»-приложением, документация «Apple» почему-то породила больше вопросов, чем дала ответов (ну или по крайней мере оставила множество пробелов). Интенсивное использование поисковых систем показало, что данная тема освещена в Сети довольно скудно: парочка вопросов на StackOverflow, пара-тройка вводных статей (на англоязычных ресурсах, конечно) – вот и все, что удалось найти.

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

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

Знакомство с движком AVAudioEngine для работы со звуком на iOS

Время на прочтение8 мин
Количество просмотров8.1K
Просматривая рунет в поисках статей на эту тему, удивляешься их отсутствию. Возможно, людям хватает описания в хэдере класса, а может, все просто предпочитают изучать его опытным путём. Так или иначе, для тех, кто первый раз сталкивается с этим классом или чувствует потребность в наглядных примерах, мы предлагаем это несложное практическое руководство от наших партнеров, Music Topia.

В плане работы со звуком Apple находится впереди своих конкурентов, и это неспроста. Компания предлагает хороший инструментарий для проигрывания, записи и обработки треков. Благодаря этому на AppStore можно увидеть огромное количество приложений, которые так или иначе работают с аудиоконтентом. В их число входят проигрыватели с хорошим звуком (Vox), аудиоредакторы с инструментами для редактирования и наложения эффектов (Sound Editor), приложения, изменяющие голос (Voicy Helium), различные симуляторы музыкальных инструментов, которые дают довольно точную имитацию соответствующего звучания (Virtuoso Piano), и даже симуляторы DJ-установок (X Djing).



Для работы с аудио Apple предоставляет фреймворк AVFoundation, который объединяет в себе несколько инструментов. Например, AVAudioPlayer используется для проигрывания одиночного трека, а AVAudioRecorder — для записи звука с микрофона. И если вам нужны только функции, предоставляемые этими классами, то просто используйте их. Если же вам необходимо наложить какой-либо эффект, проигрывать несколько дорожек одновременно, микшировать их, заняться обработкой или редактированием аудио или записать звук с выхода определенного аудиоузла, то с этим вам поможет AVAudioEngine. Больше всего данный класс привлекает возможностью наложения эффектов на трек. Как раз на основе этих эффектов построена уйма приложений с эквалайзерами и возможностью изменить голос. Кроме того, Apple позволяет разработчикам создавать свои эффекты, генераторы звука и инструменты.
Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии11

Оптимизация производительности UIKit

Время на прочтение9 мин
Количество просмотров12K
Несмотря на то, что много статей и видео с конференций WWDC посвящены производительности UIKit, эта тема до сих пор непонятна многим IOS разработчикам. По этой причине мы решили собрать наиболее интересующие вопросы и проблемы, от которых в первую очередь зависит скорость и плавность работы UI приложения.

Первая проблема, на которую стоит обратить внимание — это смешивание цветов.
Читать дальше →
Всего голосов 7: ↑5 и ↓2+3
Комментарии1

Как описывать layout в коде

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

What do we have?


UI можно определить как набор вьюх, которые отображают данные, реагируют на события и при этом каким-то определенным образом расположены на экране.


Как мы размещаем элементы на экране?


  • Qt предлагает использовать контейнеры, умеющие внутри себя располагать элементы определенным образом. Вкладывая эти контейнеры друг в друга, можно получить необходимую расстановку.
  • WPF/XAML предлагает аналогичные контейнеры.
  • Android предлагает аналогичные контейнеры + систему констреинтов.
  • iOS предлагает Autolayout. Нужно описать набор ограничений (уравнений), непротиворечиво и однозначно описывающих расположение элементов. Решив систему уравнений с этими ограничениями, движок получит координаты и размеры элементов.
  • У Delphi есть anchors: прибивание краев к контейнеру. Очень похоже на resizing masks в iOS.
  • В web на сколько я понимаю используется вкладывание друг в друга контейнеров, поведение которых описывается стилями.

What is the problem with this?


We need to use code for special cases


Описанные инструменты заточены под типовые случаи, зачастую мы не можем (или можем, но это сильно неудобно) описать расположение какого-то элемента с помощью этих инструментов. Приходится делать это в коде. Логика описания layout'а размазывается по нескольким местам.
Должен быть способ лучше.

Читать дальше →
Всего голосов 17: ↑8 и ↓9-1
Комментарии5

Истории

Swift не нужен?

Время на прочтение10 мин
Количество просмотров31K
Не перестаю задаваться вопросом — какие у Apple планы на Swift и Objective-C? Когда в 2014 году появился Swift, его создатель Крис Латтнер утверждал, что эти два языка смогут сосуществовать бесконечно долго. Из почтовой рассылки пользователям Xcode:
3 Июня 2014
McLaughlin, Michael P.
Кто-нибудь знает, действительно ли Apple собирается прекратить поддержку С и С++? Fortran уже не поддерживается, хотя осталось еще много кода на Fortran, и сравнительно нового, как в MultiNest.
Пожалуйста, скажите, что это не так. Не все считают, что «опытные пользователи» — это те, кто просто создает полнометражные мультики. Многие из них ученые и инженеры.

Здравствуйте, Michael,
Мы не строили планы на что-либо подобное. Swift — это просто новый вариант разработки под платформу. Мы не собираемся прекращать поддержку ни C, ни C++, ни Objective-C. Если вы разрабатываете на одном из этих языков, можете свободно продолжать его использовать.

— Крис.
Оригинальный текст письма
> On Jun 3, 2014, at 5:45 AM, McLaughlin, Michael P. <mpm...@mitre.org> wrote:
> Does anyone know, for real, if Apple intends to stop supporting C and C++?
> That’s what it sounded like. They already do not support Fortran even though
> there is a *lot* of Fortran code out there, even fairly new code like MultiNest.
>
> Please say it isn’t so. Not all of us consider “power users” to be just those
> who create feature-length cartoons. Many are scientists and engineers.

Hi Michael,

We have no plans to do anything like that. Swift is a new option for developing
on the platform. We have no plans to drop C, C++ or Objective-C. If you’re
happy with them, please feel free to keep using them.

-Chris


Дело в том, что в это никто не верит. Крис Латтнер уже давно покинул Apple, и если его утверждение окажется ложным, он не сможет принять критику от лица компании. В целом разработчики согласились на том, что Apple в конечном итоге откажется от Objective-C, и Swift станет единственным языком «первого класса» для разработки Cocoa-приложений.
Читать дальше →
Всего голосов 29: ↑16 и ↓13+3
Комментарии33

Swift 4 — слабые ссылки

Время на прочтение5 мин
Количество просмотров16K
Вскоре после публикации исходного кода Swift, я написал статью о том как реализованы слабые ссылки. Время не стоит на месте и всё меняется, реализация слабых ссылок в Swift тоже. Сегодня я расскажу о новой реализации и сравню ее со старой. Спасибо Guillaume Lessard за идею для поста.

Старая реализация


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

В старой версии Swift объекты имели 2 счетчика ссылок: счетчик для сильных ссылок и счетчик для слабых. Когда счетчик сильных ссылок становится равен нулю, а слабых еще нет — объект уничтожается, но память не освобождается. Поэтому в памяти остается так называемый “зомби объект” на который ссылается слабая ссылка.

Когда слабая ссылка загружается, среда времени выполнения (runtime) проверяет является ли объект “зомби”. Если он “зомби” то runtime обнуляет слабую ссылку и уменьшает счетчик слабых ссылок на 1. Когда счетчик слабых ссылок достигает 0 — память освобождается (deallocated). Это означает, что полностью объект удаляется только тогда, когда все слабые ссылки на него обнуляются.

Мне нравилась простота этой реализации, но были у нее и недостатки:
Читать дальше →
Всего голосов 13: ↑10 и ↓3+7
Комментарии3

MBLTdev 2017: amazing iOS-трек

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

Напоминаем, что 27 октября в пространстве Digital October пройдёт 4-я ежегодная конференция мобильных разработчиков MBLTdev 2017.

Под катом: описания докладов iOS-трека, CodeLabs, небольшой опрос и подарки от JetBrains, Ray Wenderlich и Skyeng.
Читать дальше →
Всего голосов 12: ↑11 и ↓1+10
Комментарии0

По итогам Rambler.iOS #9

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


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


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

Как мы боремся c динамическими библиотеками в Swift. Опыт Яндекса

Время на прочтение12 мин
Количество просмотров22K
Честно говоря, когда мы приступили к работе над перезапуском Яндекс.Карт, я и представить себе не мог, сколько проблем нам в итоге доставит Swift. Если вы начали писать на Swift совсем недавно, то, поверьте, вы пропустили все самое интересное. Каких-то два года назад не было инкрементной компиляции в принципе (даже пробел в любом файле приводил к полной пересборке), сам компилятор постоянно вылетал с Segmentation Fault на вполне безобидных вещах вроде тройной вложенности типов или наследования от Generic, индексация проекта длилась невообразимо долго, автодополнение работало через раз и так далее и тому подобное, всех бед не счесть. Подобные моменты несомненно усложняют жизнь программистам, но постепенно решаются с каждым обновлением Xcode. Однако есть более существенные проблемы, влияющие не только на разработку, но и на качество приложения: запрет компиляции статических библиотек из свифтового кода, а также отсутствие поддержки Swift на уровне iOS.


Изначально не было очевидно, что использование Swift и динамических библиотек приводит к росту времени запуска. Мы не сравнивали время запуска с предыдущей версией и воспринимали долгую загрузку как данность. Да и средств диагностики того, что же на самом деле происходит на этапе загрузки приложения, в общем-то не было. Но в один прекрасный день разработчики Apple добавили возможность профилирования работы системного загрузчика. Оказалось, что загрузка динамических библиотек занимает очень много времени по сравнению с другими этапами. Конечно, с нашим кодом тоже не все было идеально, но, пожалуй, это частные особенности отдельного приложения и не всем будет интересно о них читать. А вот борьба с динамическими библиотеками — общая тема для всех разработчиков, использующих Swift. Именно об этой проблеме и пойдет речь.

Читать дальше →
Всего голосов 54: ↑52 и ↓2+50
Комментарии15

AppCode 2017.2: Extract Method и улучшения автодополнения для Swift, поддержка __auto_type в Objective-C и многое другое

Время на прочтение2 мин
Количество просмотров3.3K
Привет, Хабр!

Вышел AppCode 2017.2, а значит, пора рассказать обо всех новых возможностях в этом релизе! Под катом, как и всегда, много картинок.

AppCode 2017.2
Читать дальше →
Всего голосов 11: ↑9 и ↓2+7
Комментарии1

Уменьшаем размер приложения: проверенные способы

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

Введение


Одним из немаловажных аспектов разработки мобильных приложений является оптимизация размера. Мы все по личному опыту знаем, что чем меньше весит приложение, тем охотнее его скачивают, особенно если под рукой нет точки доступа Wi-Fi, а скорость и/или трафик мобильного интернета оставляют желать лучшего. К тому же, нельзя забывать и о том, что некоторые маркеты ставят ограничение на размер выпускаемого приложения. Например, в App Store продукты размером до 100 МБ доступны для скачивания по мобильному интернету, если же вес приложения превышает этот порог, то скачать его можно только через Wi-Fi. На Play Market же приложение, которое вытягивает больше 100 МБ, нельзя загрузить в принципе. В данной статье мы опишем, к каким методам и хитростям прибегали наши разработчики нативных приложений на iOS для того, чтобы уменьшить вес продукта, и добавим к этому несколько дельных советов, найденных в сети.

Читать дальше →
Всего голосов 4: ↑3 и ↓1+2
Комментарии4

Пора валить! Опыт миграции с Objective-C на Swift

Время на прочтение7 мин
Количество просмотров7.5K
Олег Алексеенко, руководитель iOS разработки Superjob, рассказывает об опыте компании по переходу c Objective-C на Swift.

Статья написана по материалам выступления на RIT2017.



У Superjob 3 мобильных приложения для iOS:

  • Поиск работы (создание резюме, поиск вакансий и т.д.)
  • Поиск сотрудников (создание вакансий, поиск резюме)
  • Производственный календарь (планирование рабочего времени и отпусков)

Всего голосов 13: ↑9 и ↓4+5
Комментарии9

Опыт создания реалтайм видео-секвенсора на iOS

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

Привет, меня зовут Антон и я iOS-разработчик в Rosberry. Не так давно мне довелось работать над проектом Hype Type и решить несколько интересных задач по работе с видео, текстом и анимациями. В этой статье я расскажу о подводных камнях и возможных путях их обхода при написании реалтайм видео-секвенсора на iOS.

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

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

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
19 сентября
CDI Conf 2024
Москва
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
24 сентября
Astra DevConf 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн

CocoaHeads Russia. Прямая трансляция

Время на прочтение1 мин
Количество просмотров3K
Привет, хабраюзеры!

Сегодня (23 июня 2017) в офисе Туту.ру пройдет очередной митап iOS разработчиков. Мы организуем прямую трансляцию митапа. Если вы не смогли к нам попасть, то у вас есть шанс увидеть все online.

Программа


  • 19:10 Открытие
  • 19:15 Анимация как средство самовыражения.
    Александр Зимин
  • 20:00 Перерыв
  • 20:25 Team Lead. Структурирование мыслей.
    Николай Ашанин
  • 21:00 Перерыв
  • 21:15 Викторина
  • 21:40 Реактивный VIPER.
    Дмитрий Котенко
  • 22:10 Автепати (трансляция в личные соцсеточки)
Всего голосов 17: ↑17 и ↓0+17
Комментарии4

CocoaHeads Russia в офисе Туту.ру

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

23 июня Туту.ру и CocoaHeads Russia проведут очередную встречу сообщества iOS-разработчиков в Москве. В программе 3 доклада, викторина и афтерпати после встречи.
Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Комментарии0

Борьба за время сборки iOS-приложений

Время на прочтение4 мин
Количество просмотров12K
Чуть больше месяца назад мы выпустили iOS-приложение «Тинькофф Инвестиции». Приложение полностью написано на языке Swift, но имеет некоторые Objective-C-зависимости. Продукт быстро начал обрастать новой функциональностью, а вместе с тем время сборки проекта существенно увеличивалось. Когда мы пришли к тому, что после clean или значительных правок проект собирался дольше шести минут, мы осознали, что перемены необходимы.

image

На просторах интернета было найдено много действенных и не очень способов ускорить время сборки проекта. Особенно нас интересовало время сборки debug-версии, потому что работать становилось всё сложнее. Ниже я расскажу о методах, которые мы опробовали в рамках решения задачи, и результатах, которых мы добились. Хочу отметить, что долгое время сборки может зависеть от разных факторов, поэтому и методы для каждого проекта используются разные.
Читать дальше →
Всего голосов 24: ↑20 и ↓4+16
Комментарии16

3 cпособа нарушить Single Responsibility Principle

Время на прочтение5 мин
Количество просмотров27K
Single Responsibility Principe достаточно прост для понимания и его несложно придерживаться.
Но в работе я достаточно часто сталкиваюсь с нарушением этого принципа. В этой статье я собрал самые больные из тех способов нарушить SPR, что я встречал.
Читать дальше →
Всего голосов 40: ↑32 и ↓8+24
Комментарии156

Пишем аналог Paint на Objective-C

Время на прочтение6 мин
Количество просмотров5.3K
В этой статье мы хотели бы предложить вниманию читателей пошаговый алгоритм создания простого фоторедактора, который может оказаться полезными для приложений, предполагающих взаимодействие пользователя с изображениями. Он будет включать в себя самые базовые функции, давая возможность вносить небольшие корректировки: затереть определенную область (например, ник), выделить важный текст (телефон, адрес или просто цитату), обвести какую либо область на карте или «нарисовать слово». С технической точки зрения, тема довольно избитая, но мы нашли способ модифицировать процесс, сделав его быстрее и проще — возможно, кто-то возьмет на заметку.


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

Реализация функционала drag&drop в iOS приложении

Время на прочтение7 мин
Количество просмотров3.4K
Перетаскивание элементов интерфейса пальцем стало настолько естественной составляющей жестового управления, что редкое приложение обходится без него. Тем не менее, должным образом прописать подобный функионал в коде — не всегда тривиальная задача. О некоторых специфических моментах технической реализации drag&drop на Objective C поведает читателям партнерская компания Music Breath.

«Один из проектов, над которым у нас сейчас ведется активная работа — это Song Writer — Lyrics Memo Pad, своеобразная записная книжка для музыкантов, в которую можно в любой момент занести какую-нибудь идею, удачную строку или даже понравившиеся аккорды. Для последних требовалось внедрить в приложение функцию вставки и перетаскивания изображения, которую мы решили выполнить классическим методом — Drag’&’Drop. Сегодня мы расскажем, как реализовывали его, переписывая приложение с Unity на Native, и с какими трудностями столкнулись в процессе.

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

Анонс Rambler.iOS #9

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

image


«Even now, your enemies are eagerly watching Rambler.iOS videos»
Motivation for Harvard students

После длительного перерыва спешим анонсировать весеннюю встречу Rambler.iOS #9, которая состоится 25 мая в нашем офисе на Даниловской Мануфактуре.
Читать дальше →
Всего голосов 11: ↑9 и ↓2+7
Комментарии0