Обновить
0

Objective C *

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

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

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

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

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

Читать дальше →

Анонс Rambler.iOS #9

Время на прочтение2 мин
Охват и читатели3.8K

image


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

После длительного перерыва спешим анонсировать весеннюю встречу Rambler.iOS #9, которая состоится 25 мая в нашем офисе на Даниловской Мануфактуре.
Читать дальше →

Автономер на четырех языках. Часть 2

Время на прочтение17 мин
Охват и читатели4.6K

Что такое 8037?


Это небольшая математическая игра: вы идете по улице, и просто считаете сумму цифр в автомобильных номерах. Эту игру мы реализуем в консольном варианте, на четырех языках: Swift, Objective-C, Java и C#.


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


Читать дальше →

Использование NSProxy класса на простом примере

Время на прочтение6 мин
Охват и читатели9.5K
Всем привет. Сегодня поговорим о практическом использовании NSProxy класса, пост будет небольшим, думаю многим новичкам будет интересно почитать.

Немного оффтопа.

В общем, по распределению в компании я попал на легаси проект на Objc, где massive view controller считался эталом архитектуры. Конечно же без нормальной спеки и тестов. За недолгую карьеру разработчика у меня выработалось пару правил для таких вот проектов, первое — никакого рефакторинга с моей стороны без указания сверху, второе — трогать существующий код только в крайней необходимости. Всё это на почве того, что в таких проектах очень сложно отловить регрессию (а может я просто ленивый?).
Читать дальше →

Автономер на четырех языках. Часть 1

Время на прочтение6 мин
Охват и читатели6.9K

Небольшое вступление


Я попал в мир IT относительно недавно: всего два года я занимаюсь разработкой приложений под iOS. Но кроме Objective-C и Swift меня всегда манил мир Java и C#. Периодически я выделял время, чтоб посмотреть какие-то видео, обучающие основам этих языков, но дальше простого просмотра и переписывания кода с экрана дело не заходило. И тут я вспомнил об одной математической игре, которую мне однажды посоветовал мой друг.


Суть игры заключается в следующем: вы идете по улице и смотрите на автомобильные номера. И в каждом номере считаете сумму всех цифр (например, в номере 8037 нужно посчитать 8 + 0 + 3 + 7). Это самый простой уровень игры. Второй по сложности уровень — посчитать сумму первой половины номера и второй (80 + 37). Есть еще третий уровень — умножить все цифры (нули при этом пропустив: 8 х 3 х 7) и четвертый — умножить первую половину номера на вторую (80 х 37).


В общем: эту игру (в консольном варианте) я и решил написать на четырех языках: Swift, Objective-C, Java и C#. Что из этого получилось? Давайте посмотрим.


Читать дальше →

Опыт переноса приложения с Unity3D на iOS sdk и SceneKit

Время на прочтение7 мин
Охват и читатели4.6K
Сегодня делимся опытом наших партнеров — компании Try Sports Now — о том, как с помощью фреймворка SceneKit дать приложению вторую жизнь.

«Случается, что приложение, которое долгое время прозябало в безвестности, вдруг начинает набирать популярность среди пользователей и приносить прибыль. Само собой разумеется, что при таком раскладе целесообразно его развивать и обновлять. Одно плохо: может оказаться, что исходный код продукта настолько морально устарел за время отсутствия спроса, что временные затраты на его обновление сопоставимы с ресурсом, уходящим на разработку нового исходника с нуля. С подобной проблемой мы столкнулись в работе с проектом Human Anatomy 3D. В этой статье мы расскажем, как осуществлялся переход новой версии приложения с Unity3D исходников на нативные, и осветим некоторые проблемы возникшие в процессе.
Читать дальше →

Разработка компонента для создания коллажей

Время на прочтение6 мин
Охват и читатели2.6K
Популярность приложений для обработки фотографий постоянно растет. Недавно мы предлагали вниманию наших читателей гайд для новичков по написанию собственного фоторедактора. Сегодня мы хотели бы поделиться с хабровчанами опытом наших партнеров – разработчиков компании New Technologies, – полученным в ходе работы над апдейтом их приложения. Этот материал может быть полезен как при работе с приложением-фоторедактором, так и с проектами, в которых обработка изображений является побочной функцией (собственно, в случае, о котором пойдет речь, так оно и было).

«В ходе проектирования My Wardrobe — приложения для хранения коллекции одежды и образов — нашей команде неоднократно приходилось решать вопросы удобства интерфейса: находить баланс между множеством функций и легкостью доступа к ним. Помимо хранения всей одежды из своего гардероба, пользователю предоставлялась возможность создать образ из комбинации вещей и прикрепить к нему фотографию. Однако уже на этапе проектирования было ясно, что, возможно, пользователь не захочет делать новое фото своего образа, а предпочтет создать иконку из фотографий одежды, расположив их на однотонном фоне — это устоявшаяся практика изображения образа в мире моды.



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

Внедрение сервиса Apple Music в iOS-приложение

Время на прочтение5 мин
Охват и читатели3.6K
Сегодня наши партнеры – разработчики компании Music Paradise – приготовили новый материал для читателей нашего блога. На этот раз ребята подробно расскажут об интеграции Apple Music в собственное приложение. Аналогичный опыт уже был описан на Хабре, однако статья разработчиков Music Paradise призвана не столько познакомить читателей с данным процессом, сколько подробно рассказать о нем и о некоторых важных, но неочевидных моментах при работе с Apple Music.

«С релизом iOS 9.3 яблочная корпорация дала возможность использовать свой сервис Apple Music для воспроизведения музыки. Мы решили опробовать эту возможность в работе над своим приложением Music Paradise Player. Опыт оказался весьма поучительным — в системе обнаружились некоторые подводные камни и слабые места, о которых полезно знать заранее. В этой статье мы постараемся кратко изложить основные моменты работы с Apple Music, а также некоторые особенности этой системы.

Читать дальше →

Получил 1.2K звезд на GitHub с ужасной архитектурой. Как?

Время на прочтение7 мин
Охват и читатели79K
Хочу поделится довольно обычной, но показательной историей. Идея проекта появилась 3 месяца назад, за 1 месяц была реализована и вот уже два месяца как проект переодически висит в топе GitHub, попал в какие только можно профильные новостные ресурсы, и даже забрался в дайджест в статье “Топ 5 библиотек апреля”.
Читать дальше →

AppCode 2017.1: улучшенная поддержка Swift, новые возможности кодогенерации и многое другое

Время на прочтение3 мин
Охват и читатели6.7K
Привет, Хабр! Недавно мы выпустили AppCode 2017.1, сейчас готовим первое обновление — пора рассказать обо всех изменениях в этой версии.

Читать дальше →

Реализация кастомного UI-элемента для выбора времени. Часть 2

Время на прочтение7 мин
Охват и читатели4K
В первой части статьи я подробно воссоздал процесс реализации циферблата. Теперь мы подошли к самому интересному и сложному этапу создания собственного кастомного контрола.
Читать дальше →

Реализация кастомного UI-элемента для выбора времени. Часть 1

Время на прочтение8 мин
Охват и читатели8.5K
17 ноября в Москве в рамках Международной конференции мобильных разработчиков MBLTdev Александр Зимин выступил с докладом на тему «Визуализируем за рамками стандартных компонентов UIKit». В первую очередь, этот доклад заинтересует iOS-разработчиков, которые хотят узнать больше о разработке кастомных UI-элементов. Меня он заинтересовал примером кастомного контрола, который я решил реализовать и доработать с учетом тезисов, озвученных в докладе. Пример был реализован на Swift, я реализую его на Objective-C.
Читать дальше →

Читаем бинарные файлы iOS-приложений. Часть 2: Swift

Время на прочтение6 мин
Охват и читатели7K

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



Читать дальше →

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

Гайд по созданию простого фоторедактора

Время на прочтение11 мин
Охват и читатели12K
Сегодня мы предлагаем читателям подробное руководство по созданию простого фоторедактора на iOS. Для опытных разработчиков задача несложная, но новичкам подобный пошаговый разбор всего процесса, возможно, окажется полезен. Речь пойдет о классической среде разработки для выбранной операционной системы – Xcode version 8.2.1. Разработку будем вести, опять же, на классическом объектно-ориентированном языке программирования Objective-C.

Прежде чем приступать к собственно разработке, предлагаем сначала разбить задачу на подзадачи.

  1. Загрузить фотографию из галереи
  2. Создать коллекцию с фильтрами
  3. Реализовать возможность применять любой из фильтров на выбранную нами фотографию
  4. Сохранить результат в галерею.
Читать дальше →

Использование code blocks из Objective-C в Delphi на macOS: как мы навели мосты

Время на прочтение15 мин
Охват и читатели4.8K

image


Многие, наверное, слышали о замечательном способе решения программистских задач под названием метод утенка (rubber duck debugging). Суть метода в том, что надо сесть в ванную, расслабиться, посадить на воду игрушечного утенка, и объяснить ему суть той проблемы, решение которой вы не можете найти. И, чудесным образом, после такой беседы решение находится.


В своей прошлой статье на Хабре, где я рассказывал о разработке программы для инспектирования Wi-Fi сетей для macOS, в роли утенка оказался сам Хабр: я пожаловался на то, что нам никак не удается придумать способ реализации code blocks из Objective-C в Delphi. И это помогло! Пришло просветление, и всё получилось. О ходе мыслей и о конечном результате я и хочу рассказать.

Читать дальше →

Паттерны проектирования, взгляд iOS разработчика. Часть 2. Наблюдатель

Время на прочтение7 мин
Охват и читатели12K

Содержание:


Часть 0. Синглтон-Одиночка
Часть 1. Стратегия
Часть 2. Наблюдатель


Сегодня мы разберемся с "начинкой" паттерна "Наблюдатель". Сразу оговорюсь, что в мире iOS у вас не будет острой необходимости реализовывать этот паттерн, поскольку в SDK уже есть NotificationCenter. Но в образовательных целях мы полностью разберем анатомию и применение этого паттерна. К тому же, самостоятельная реализация может обладать большей гибкостью и, в некоторых случаях, быть более полезной.


Читать дальше →

Читаем бинарные файлы iOS-приложений

Время на прочтение7 мин
Охват и читатели11K

На хабре есть много статей о том, как работает рантайм Swift/Objective-C, но для еще более полного понимания того, что происходит под капотом, полезно залезть на самый низкий уровень и посмотреть, как код iOS приложений укладывается в бинарные файлы. Кроме того, безусловно, под капот приходится залезать при решении реверс-инжиниринговых задач. В этой статье мы обсудим самые простые конструкции Objective-C, а о Swift и более сложных примерах поговорим в последующих статьях.


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




Читать дальше →

Как расширить функционал приложения, размещенного на Mac Store, при помощи Apple Script

Время на прочтение5 мин
Охват и читатели3.5K
С тех пор, как для прохождения модерации на Mac Store стала требоваться поддержка Sandbox, прошло уже 5 лет. Хотя возможности MacOS и Sandbox постепенно расширяются, разработчики, желающие публиковаться в официальном магазине Apple, по-прежнему ограничены в возможностях работы c этой ОС. Особенно остро эта проблема стоит для утилит и системных приложений.


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

Наши партнеры столкнулись с подобной необходимостью при работе с утилитой для мониторинга системы MaCleaner X. Вся линейка продуктов MaCleaner распространяется исключительно через Mac App Store.

Отличительными особенностями MaCleaner X являются поддержка тачбара и кастомизированный дизайн: приложение автоматически определяет модель Mac и предлагает особый вариант интерфейса для каждого девайса. Однако в дополнение к этому мы в данный момент работаем над тем, чтобы реализовать в расширенной версии некоторые функции, которые пользователи хотели бы видеть в программе и которые для утилит, распространяемых вне Mac Store, считаются привычными.
Читать дальше →

Как пробудить приложение в iOS: по расписанию и не очень

Время на прочтение3 мин
Охват и читатели13K
Пуш-уведомления – хороший способ взаимодействия с пользователями, их вовлечения и возврата в приложения (кто хоть раз не просыпался ночью от не вовремя доставленного уведомления?). Однако есть у пушей и еще одна интересная функция, о которой не все знают.

Представьте, что ваш мессенджер, так любимый пользователем, отправляется в фоновый режим и там «засыпает». Как ему принять звонок, будучи не подключенным к серверу? Ответ как раз и заключается в пуше – сообщение «будит» приложение, оно переходит в активный режим и уже может принять звонок.
Читать дальше →

Видеозаписи со встречи CocoaHeads 1 марта 2017

Время на прочтение2 мин
Охват и читатели5.2K
image

1 марта в офисе Avito состоялась очередная встреча сообщества iOS разработчиков CocoaHeads. Под катом вас ждут небольшой рассказ о том, как прошёл митап, и, самое главное, видеозаписи докладов. Приятного просмотра!