<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <language>ru</language>
    <title>Objective-C</title>
    <description/>
    <link>https://tproger.ru/tag/objective-c</link>
    <atom:link href="https://tproger.ru/tag/objective-c/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Sun, 04 Oct 2026 15:04:13 GMT</lastBuildDate>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>12</sy:updateFrequency>
    <image>
      <title>Objective-C</title>
      <link>https://tproger.ru</link>
      <url>https://tproger.ru/apple-touch-icon.png</url>
    </image>
    <item>
      <title>Apple выпустила Swift SDK для написания Android-приложений — спустя 11 лет после релиза языка</title>
      <link>https://tproger.ru/news/apple-vypustila-swift-sdk-dlya-napisaniya-android-prilozhenij---spustya-11-let-posle-reliza-yazyka</link>
      <comments>https://tproger.ru/news/apple-vypustila-swift-sdk-dlya-napisaniya-android-prilozhenij---spustya-11-let-posle-reliza-yazyka?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/apple-vypustila-swift-sdk-dlya-napisaniya-android-prilozhenij---spustya-11-let-posle-reliza-yazyka</guid>
      <description><![CDATA[<p>Apple выпустила Swift SDK для Android — теперь на Swift можно писать нативные Android-приложения и переносить код между платформами</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/apple-vypustila-swift-sdk-dlya-napisaniya-android-prilozhenij---spustya-11-let-posle-reliza-yazyka">Apple выпустила Swift SDK для написания Android-приложений — спустя 11 лет после релиза языка</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[Kotlin]]></category>
      <category><![CDATA[macOS]]></category>
      <category><![CDATA[Objective-C]]></category>
      <category><![CDATA[Flutter]]></category>
      <category><![CDATA[iPhone]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 27 Oct 2025 04:06:16 GMT</pubDate>
      <content:encoded><![CDATA[<p>Apple неожиданно открыла новую страницу в истории Swift.</p><p>Компания <a href="https://www.swift.org/blog/nightly-swift-sdk-for-android/">представила</a> <b>официальный Swift SDK для Android</b>, позволяющий писать нативные Android-приложения на фирменном языке, изначально созданном для iOS и macOS.</p><h2>От iPhone до Android</h2><p>Swift появился в 2014 году как альтернатива Objective-C — более безопасный, современный и лаконичный язык для экосистемы Apple.</p><p>За 11 лет он вырос из «внутреннего» инструмента в многофункциональную платформу, на которой создают <b>облачные сервисы, десктопные приложения для Windows и даже прошивки для микроконтроллеров</b>.</p><p>Теперь Swift впервые официально выходит за пределы «яблочной экосистемы. Превью-версия SDK для Android доступна уже сегодня — в составе Swift-инсталлятора для Windows или отдельно для macOS и Linux.</p><figure><img src="https://media.tproger.ru/user-uploads/111041/2025-10-27/9d4f131a-7f10-47c1-a75b-3180cfe12892.jpeg" alt="" /></figure><h2>Как это работает</h2><p>Новый SDK — результат многомесячной работы <b>Swift Android Workgroup</b>, открытого сообщества, куда может присоединиться любой разработчик. С его помощью можно:</p><ul><li>собирать <b>нативные Android-приложения</b> на Swift;</li><li><b>переносить существующие Swift-пакеты</b> — более 25% уже совместимы с Android;</li><li><b>интегрировать Swift-код с Java</b> через проект <b>swift-java</b>, автоматически генерирующий безопасные биндинги между языками.</li></ul><p>Apple <a href="https://www.swift.org/documentation/articles/swift-sdk-for-android-getting-started.html">опубликовала</a> подробное руководство <i>«Getting Started»</i> и примеры кода, демонстрирующие полный цикл разработки Android-приложений на Swift.</p><h2>Что это значит для экосистемы</h2><p>Релиз открывает дорогу к кроссплатформенным приложениям без использования Flutter, Kotlin Multiplatform или React Native.</p><p>Теперь компании смогут писать бизнес-логику один раз на Swift и использовать ее и в iOS-, и в Android-версиях.</p><p>Эксперты отмечают, что шаг Apple может <b>снизить барьеры между мобильными экосистемами</b> и ускорить развитие open-source сообщества Swift.</p><h2>Что дальше</h2><p>По словам участников проекта, впереди — создание полноценного Android-Toolchain, улучшение совместимости со средами разработки и официальное внедрение CI-сборок.</p><p>Разработчики уже готовят документ с видением будущего Swift на Android, который определит приоритеты и стратегию развития.</p><p><i>«Swift вырос из языка для iOS в универсальный инструмент для всего программного мира. Теперь он будет жить и в Android-экосистеме»</i>, — говорится в сообщении разработчиков.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как освоить ассемблер для разработчиков Swift: первые шаги</title>
      <link>https://tproger.ru/articles/kak-osvoit-assembler-dlya-razrabotchikov-swift--pervye-wagi</link>
      <comments>https://tproger.ru/articles/kak-osvoit-assembler-dlya-razrabotchikov-swift--pervye-wagi?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-osvoit-assembler-dlya-razrabotchikov-swift--pervye-wagi</guid>
      <description><![CDATA[<p>Освойте основы ассемблера для Swift: узнайте, как работают регистры, настройте Xcode для компиляции .s-файлов и напишите первую программу на ассемблере. Практическое руководство для iOS-разработчиков.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-osvoit-assembler-dlya-razrabotchikov-swift--pervye-wagi">Как освоить ассемблер для разработчиков Swift: первые шаги</a>»</p>]]></description>
      <category><![CDATA[Низкоуровневое программирование]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[macOS]]></category>
      <category><![CDATA[Objective-C]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Xcode]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 17 Sep 2025 10:00:04 GMT</pubDate>
      <content:encoded><![CDATA[<p><i>Статья <a href="https://arturgruchala.com/assembler-for-swift-developers/">переведена</a> с оригинала польского iOS-разработчика Артура Грачаты, который делится практическими советами по низкоуровневому программированию для улучшения навыков Swift-разработчиков.</i></p><h2>Зачем разработчику Swift изучать ассемблер</h2><p>Ассемблер — это не просто низкоуровневое программирование, а способ понять, как код на Swift или Objective-C преобразуется в инструкции процессора. Он помогает разобраться в движении данных, оптимизировать производительность и отлаживать сложные ошибки. Изучение ассемблера не требует писать целые приложения на нем, но дает уверенность и глубокое понимание работы системы. К тому же, умение работать на уровне процессора добавляет разработчику уникальности и открывает новые карьерные перспективы.</p><h2>Регистры: основа работы процессора</h2><p>Регистры — это быстрые ячейки памяти процессора, своего рода «рабочий стол» для данных. На архитектуре Apple Silicon (ARM64) они выполняют следующие роли:</p><ul><li>x0–x7: передача аргументов и возвращаемых значений.</li><li>x8: регистр косвенных результатов (используется редко).</li><li>x9–x15: временные регистры для промежуточных вычислений.</li><li>x16–x17: для системных вызовов (например, указание номера вызова).</li><li>x18: регистр платформы, сохраняемый между вызовами.</li><li>x19–x28: регистры, которые нужно сохранять при вызове функций.</li><li>sp (x31): указатель стека, хранящий локальные данные.</li><li>pc: счетчик программы, указывающий на следующую инструкцию.</li></ul><p>При выполнении системного вызова (например, для вывода текста в консоль) аргументы загружаются в регистры x0, x1 и далее, номер вызова — в x16, а команда svc 0 передает управление ядру системы.</p><h2>Настройка Xcode для работы с ассемблером</h2><p>Чтобы начать писать код на ассемблере, нужно настроить проект в Xcode:</p><ol><li>Откройте Xcode и создайте новый проект: File → New → Project….</li><li>Выберите Command Line Tool в разделе macOS, затем нажмите Next.</li><li>Назовите проект, например, HelloAsm, выберите язык C (его позже заменим) и нажмите Create.</li><li>В Project Navigator удалите файл main.c.</li><li>Добавьте новый пустой файл: File → New → File… → Other → Empty, назовите его main.s и нажмите Create.</li><li>В настройках проекта откройте Build Phases и убедитесь, что main.s добавлен в Compile Sources.</li></ol><p>Теперь Xcode будет компилировать файл main.s как точку входа для программы на ассемблере.</p><h2>Первая программа: «Hello, Assembly!»</h2><p>Рассмотрим минимальную программу, которая выводит «Hello, Assembly!» в терминал. Вот ее структура с пояснениями:</p><ul><li>.section __TEXT,__text &amp; .global _main: указывает, что это исполняемый код, а _main — точка входа.</li><li>mov x0, 1: задает 1 (stdout) как первый аргумент системного вызова.</li><li>adrp/add: загружает адрес строки msg в регистр x1 (с учетом разбиения на страницы).</li><li>mov x2, #0x11: задает длину сообщения (включая символ новой строки и нулевой терминатор).</li><li>mov x16, #0x4: указывает номер системного вызова для записи в macOS.</li><li>svc 0: выполняет системный вызов, передавая управление ядру.</li><li>Повторение для вызова выхода.</li></ul><p>Примечание: в коде используются шестнадцатеричные числа. Знание преобразования между десятичными, двоичными и шестнадцатеричными числами пригодится.</p><h2>Сборка и запуск</h2><p>Соберите и запустите проект в Xcode. При успешной компиляции в терминале появится:</p><p>Hello, Assembly!</p><p>Если вывод не появился, проверьте:</p><ul><li>Файл main.s добавлен в Compile Sources.</li><li>Нет лишних C-файлов, которые могут переопределить main.</li><li>Архитектура проекта соответствует вашему оборудованию (Intel или Apple Silicon).</li></ul><h2>Что дальше</h2><p>Написав первую программу на ассемблере, вы сделали шаг к пониманию работы процессора. Продолжайте изучать регистры — это упростит отладку и поможет лучше понимать, где находятся данные в вашем коде.</p>]]></content:encoded>
    </item>
    <item>
      <title>Около 3 млн iOS- и macOS-приложений могли быть атакованы через 10-летнюю «дыру»</title>
      <link>https://tproger.ru/news/okolo-3-mln-ios--i-macos-prilozhenij-mogli-byt-atakovany-cherez-10-letnyuyu--dyru-</link>
      <comments>https://tproger.ru/news/okolo-3-mln-ios--i-macos-prilozhenij-mogli-byt-atakovany-cherez-10-letnyuyu--dyru-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/okolo-3-mln-ios--i-macos-prilozhenij-mogli-byt-atakovany-cherez-10-letnyuyu--dyru-</guid>
      <description><![CDATA[<p>В системе CocoaPods нашли уязвимость, которой не один год и которая могла стать причиной атаки миллионов macOS- и iOS-приложений</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/okolo-3-mln-ios--i-macos-prilozhenij-mogli-byt-atakovany-cherez-10-letnyuyu--dyru-">Около 3 млн iOS- и macOS-приложений могли быть атакованы через 10-летнюю «дыру»</a>»</p>]]></description>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[macOS]]></category>
      <category><![CDATA[Objective-C]]></category>
      <category><![CDATA[Уязвимость]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 02 Jul 2024 12:52:31 GMT</pubDate>
      <content:encoded><![CDATA[<p>В течение десятилетия в системе CocoaPods, которая используется для управления проектами на Swift и Objective-C, существовали уязвимости, которые позволяли хакерам вставлять вредоносный код в тысячи приложений для macOS и iOS.</p><p>Эти уязвимости, устраненные в октябре прошлого года, могли поставить под угрозу безопасность миллионов пользователей.</p><h2>Уязвимости и их последствия</h2><p>Исследователи из EVA Information Security выявили три ключевые уязвимости:</p><ul><li><b> CVE-2024-38367:</b> Уязвимость, связанная с манипуляцией URL в механизме проверки электронной почты, позволяла хакерам перенаправлять ссылки на свои серверы.</li><li><b>CVE-2024-38368:</b> Возможность захвата управления над «осиротевшими» кодовыми пакетами, которые продолжают использоваться в приложениях, но оставлены их разработчиками.<br /></li><li><b>CVE-2024-38366:</b> Уязвимость, позволяющая выполнить код на сервере CocoaPods через инъекцию команд в процессе проверки адресов электронной почты.<br /></li></ul><h2>Пример уязвимости</h2><p>Одна из уязвимостей позволяла изменить URL для перенаправления пользователей на вредоносный сайт. Например, вместо обычного URL, который ведет на сервер CocoaPods:</p><p>Хакеры могли изменить его на:</p><h2>Рекомендации по безопасности</h2><p>Разработчикам, использующим CocoaPods, рекомендуют следующее:</p><ul><li>Синхронизировать файл podfile.lock со всеми разработчиками, чтобы избежать автоматического обновления до потенциально опасных версий.</li><li>Выполнять проверку CRC (контрольной суммы) для внутренне разработанных подов.<br /></li><li>Проводить тщательный обзор безопасности любого стороннего кода.<br /></li><li>Проверять зависимости CocoaPods и избегать использования «осиротевших» подов.<br /></li><li>Использовать сторонние зависимости, которые активно поддерживаются.<br /></li><li>Проводить периодические проверки безопасности кода для выявления секретов и вредоносного кода.<br /></li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Зачем учить Objective-C в 2022 году: умелое управление памятью и другие операции на низком уровне</title>
      <link>https://tproger.ru/articles/zachem-uchit-objective-c-v-2022-godu-umeloe-upravlenie-pamjatju-i-drugie-operacii-na-nizkom-urovne</link>
      <comments>https://tproger.ru/articles/zachem-uchit-objective-c-v-2022-godu-umeloe-upravlenie-pamjatju-i-drugie-operacii-na-nizkom-urovne?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Мария Кривоченко]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/zachem-uchit-objective-c-v-2022-godu-umeloe-upravlenie-pamjatju-i-drugie-operacii-na-nizkom-urovne</guid>
      <description><![CDATA[<p>Рассказываем, почему стоит выучить Objective-C в 2022 году. Обсудим, какие плюсы приносит знание языка, где и зачем его до сих используют.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/zachem-uchit-objective-c-v-2022-godu-umeloe-upravlenie-pamjatju-i-drugie-operacii-na-nizkom-urovne">Зачем учить Objective-C в 2022 году: умелое управление памятью и другие операции на низком уровне</a>»</p>]]></description>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Objective-C]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 14 Mar 2022 11:56:41 GMT</pubDate>
      <content:encoded><![CDATA[<p>Мобильные разработчики в КРОК решают реальные проблемы заказчиков и конечных пользователей: создают приложения для удалённой проверки остроты зрения, интеграции с умными очками для полиции Дубая или доступа к корпоративной социальной сети. В этой статье команда мобильной разработки рассказала, почему Objective-C до сих пор жив и зачем его учить в 2022 году.</p><h2>Глубокое понимание процессов</h2><p>Большая часть внутреннего кода macOS, XCode и ядра iOS написаны на C и С++. Objective-C очень хорошо с ними «стыкуется», потому что формально это не язык программирования, а большой препроцессор к чистому Cи.</p><p>Поверх Objective-C строится вся экосистема Apple. Тот же Swift во многом написан поверх него, и чтобы понимать, как система работает изнутри и почему Swift выглядит так, как выглядит, и работает так, как работает, «базу» полезно знать.</p><p>Например, Objective-C помогает понять, что не все NSProxy это NSObject и в чём разница между Int, NSInteger и NSNumbe. А также за счёт чего работает Swizzling, что такое Selector, как работает responder chain и так далее. В Swift это сильно инкапсулировано и абстрагировано, а потому не очень хорошо видно.</p><p>Кроме того, Objective-C, как и любой Cи-язык, помогает разобраться в том, как работают ссылки, указатели и память в принципе. В нём приходится работать со ссылками напрямую, поэтому достаточно написать 1-2 небольших проекта, чтобы понять тему.</p><h2>Плюсы на собеседовании</h2><p>На большинстве собеседований вам будут задавать каверзные вопросы об операциях, которые видны при разработке на Objective-C, но редко встречаются в Swift.</p><p>Например, атомарность и атрибуты копирования. Долгое время контроль памяти в Objective-C был ручным, и атомарность — то есть доступность переменных одновременно из разных тредов — достаточно больная тема. Поэтому, проработав N времени на Objective-C, ты начинаешь неплохо в этом разбираться: можешь объяснить, какие проблемы возникают в работе с тредами, когда нужно предусмотреть атомарность или подумать о том, как будет копироваться значение, нужен ли дополнительный акцессор.</p><h2>Objective-C до сих пор используется в разработке</h2><p>Во-первых, кажется, у любого проекта, который существует больше 2-3 лет, часть кодовой базы написана на Objective-C. Это может быть хоть скрытый слой, который вынесен в зависимость и не особо стыкуется с общей кодовой базой — но он есть и с ним периодически нужно работать: править баги или добавлять фичи.</p><p>Во-вторых, пока некоторые приложения не получается переписать на Swift — это требует времени и денег, которые компания или заказчик не готовы тратить. Поэтому база Objective-C разрастается.</p><p>В-третьих, если необходима сложная работа с сетью, памятью, ресурсами устройства, то приходится использовать языки с более низким уровнем абстракции, чем у Swift. Это могут быть Objective-C, Objective-C++ или просто C и С++ — в зависимости от того, насколько низкий уровень нам нужен.</p><p>Подобное встречается довольно редко, например в работе с мессенджерами (Telegram), потоковым вещанием (Zoom) или видеосервисами (Кинопоиск). В таких случаях тоже можно абстрагироваться и либо вынести часть логики в отдельную зависимость, либо перенести рендеринг или всю логику пакетирования данных на бэкенд. Но не всегда.</p><h2>Некоторые вещи сложнее делать на Swift, чем на Objective-C</h2><p>Иногда решать задачи на Swift долго и неудобно — проще воспользоваться костылями, которые давно есть в Objective-C.</p><p>В основном речь идёт про управление памятью: протянуть сообщение в несанкционированную память, вручную поманипулировать управлением памятью или тредами. Разберём пару кейсов.</p><p>В Objective-C есть чисто «сишные» штуки: memory allocation, управление указателями и ссылками напрямую и так далее. Поэтому там, где нужно очень аккуратно работать с памятью (например, при работе с видео- и аудиопотоками), c помощью Objective-C можно тонко оптимизировать приложение, улучшить производительность и оценки по памяти. В Swift же придётся полагаться на ARC (хотя и тут есть свои лайфхаки).</p><p>Кроме того, ARC не решает многих проблем — например, с длительностью жизни объектов. Допустим, у нас есть голосовое сообщение на 14 минут. Пользователь уже прослушал 12 — и они «съели» всю оперативную память. На Objective-C мы легко можем их почистить — на уровне указателей и байтов — оставив только текущую минуту и две последних. А на Swift это потребует высокого уровня абстракции и большого количества кода (либо использования трюков Objective-C через Swift-интерфейс).</p><p>Наконец, зачастую нагруженные, сложные и высоко оптимизированные библиотеки, реализующие распознавание видео или фото, компьютерное зрение или криптографические вычисления, написаны на С++. И интегрироваться с ними через Swift больно, долго и дорого. Как правило, легче создать заголовочный файл в Objective-C, написать пару методов для красивой обёртки и обратиться уже к ним. Такие кейсы очень часто встречаются при интеграции с третьими библиотеками.</p><h2>Что в итоге?</h2><p>Да, Objective-C не идеален, но его полезно выучить.</p><p>Это по-прежнему востребованный язык программирования. Он помогает лучше понять, как устроен Swift и экосистема Apple в целом, позволяет гранулярно работать с низкоуровневыми задачами. Кроме того, на Objective-C всё ещё написана больша́я часть кодовой базы, которую нужно поддерживать. И наконец, знание языка — это бонус на собеседованиях.</p>]]></content:encoded>
    </item>
    <item>
      <title>Моя история в IT: как самостоятельно изучить Swift и стать iOS-разработчиком</title>
      <link>https://tproger.ru/articles/moja-istorija-v-it-kak-samostojatelno-izuchit-swift-i-stat-ios-razrabotchikom</link>
      <comments>https://tproger.ru/articles/moja-istorija-v-it-kak-samostojatelno-izuchit-swift-i-stat-ios-razrabotchikom?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[ИТ-компания Neti]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/moja-istorija-v-it-kak-samostojatelno-izuchit-swift-i-stat-ios-razrabotchikom</guid>
      <description><![CDATA[<p>Максим из Казани сам освоил Objective-C и Swift, пишет приложения с 2017 года, работал в стартапе и делал проекты для клиента из Арабских Эмиратов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/moja-istorija-v-it-kak-samostojatelno-izuchit-swift-i-stat-ios-razrabotchikom">Моя история в IT: как самостоятельно изучить Swift и стать iOS-разработчиком</a>»</p>]]></description>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[Карьера]]></category>
      <category><![CDATA[Objective-C]]></category>
      <category><![CDATA[Гостевая публикация]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 14 Apr 2021 10:17:57 GMT</pubDate>
      <content:encoded><![CDATA[<p>Максим — iOS-разработчик из Казани, он самостоятельно освоил Objective-C и Swift и пишет мобильные приложения с 2017 года. Он успел поработать в стартапе и международной ИТ-компании, делал приложения для клиента из Арабских Эмиратов и Музея русского импрессионизма. С 2020 года Максим работает в Neti.</p><h2>В автобусе увидел у человека iPad и решил стать iOS-разработчиком</h2><p>— Максим, где ты учился?</p><p>Мне кажется, у выпускников вообще нет понимания, что делать после школы. По крайней мере, у меня не было. Я просто постарался максимально хорошо сдать ЕГЭ и подал документы на факультет, на который сложнее всего пройти по баллам. Это оказалась «Информационная безопасность» в КНИТУ-КАИ им. А.Н.Туполева: чтобы поступить на бюджет, нужно было набрать за ЕГЭ 220 баллов. Я подумал, что раз туда сложно поступить, значит, это перспективная специальность. Но сначала мне там не очень нравилось — было мало программирования.</p><p>На первом курсе мы изучали Assembler, низкоуровневый язык программирования, который мало понятен людям. Он мне казался очень странным. С третьего курса мы начали программировать на C# и стало интереснее.</p><p>— Как получилось, что ты стал именно iOS-разработчиком? Не легче ли было развиваться в разработке на C#?</p><p>Я заинтересовался разработкой под iOS на втором курсе, до С#. Тогда под iOS писали на Objective-C, Swift только появился. Помню, в автобусе увидел у человека iPad и подумал: «Прикольно делать софт для iOS, iPad, iPhone». После этого случая я начал изучать Objective-C по учебнику и видео на YouTube. Потом продал игровой компьютер, купил MacBook и стал практиковаться. Через 7–8 месяцев самообучения решил искать работу. Сначала не клеилось: без опыта никуда не брали. Я прошел 5 собеседований, прежде чем устроился в ИТ-отдел банка.</p><h2>Спарсил «Википедию», чтобы устроиться в банк</h2><p>— Помнишь тестовое на собеседовании в банке?</p><p>Попросили написать список городов России на Objective-C. Нужно было, чтобы в нем отображались название, герб и небольшое описание. Я справился с заданием за 6-8 часов: подтянул библиотеку парсера страниц и спарсил «Википедию».</p><p>— Какие задачи ты решал в банке?</p><p>Я дорабатывал банковское приложение. Там надо было сделать карту с банкоматами. В принципе, моих знаний хватало на то, чтобы это реализовать. Но у приложения была очень сложная архитектура, и я, тогда еще совсем новичок, не мог в нем разобраться, а мой руководитель, программист, который закладывал архитектуру, не особо помогал. Я ушел из банка через три месяца: ничего не получалось и я потерял мотивацию.</p><h2>Когда увидел Swift, подумал: «Что это за прелесть?!»</h2><p>— Быстро нашел новую работу?</p><p>Да. Я устроился в мультипликационную студию, где делал игровое приложение, по которому дети могли учить алфавит. Там тоже проработал недолго — несколько месяцев. На проекте я был единственным разработчиком и мне не хватало наставника, который бы научил меня хорошей архитектуре. После увольнения был перерыв около года, а потом я вернулся в разработку. Устроился в ИТ-компанию, которая делала мобильные приложения. Там я познакомился со Swift. Помню, увидел его и подумал: «Что это за прелесть?!»</p><p>— Почему?</p><p>Все понятно и логично. Не нужно писать кучу кода в отличие от Objective-C. Объявления переменных и функций в Swift гораздо легче и проще. Я перешел с Objective-C на Swift быстро, за пару дней.</p><p>— Какие проекты ты делал в ИТ-компании?</p><p>У меня было несколько сложных и интересных проектов. Например, мы сделали приложение для Музея русского импрессионизма, в котором можно посмотреть видео или послушать аудио о картинах. Еще запомнилось приложение «Зеномания» для фанатов волейбольного клуба «Зенит». В нем можно почитать новости, посмотреть матчи, купить мерч с символикой команды. А еще там можно «примерить» шарф или кепку и сделать «зеноселфи».</p><p>— Тебе нравилось в ИТ-компании?</p><p>Да. Там интересный коллектив, классные проекты, коллеги помогали другу другу и обучали новичков. За полтора года, что я там работал, прокачался до начинающего мидла.</p><p>— Что было дальше?</p><p>Из ИТ-компании я ушел в стартап — делали социальную сеть наподобие «ВКонтакте» для Арабских Эмиратов. В нем было очень много функционала: чат, фото, видео, посты, группы, внутренняя валюта, видеозвонки.</p><p>— С реализацией какого функционала возникли сложности?</p><p>Я тогда впервые делал чат, и там были не только текстовые, но и аудиосообщения. Пришлось поломать голову, как реализовать этот функционал так, чтобы он работал быстро и без лагов.</p><p>— Сколько ты проработал в стартапе?</p><p>Около года. В один момент прекратилось финансирование и все загнулось. Больше я в стартап не пойду. После этого я полгода работал в интернет-магазине, а после устроился в международную ИТ-компанию Luxoft.</p><h2>Как вместо Москвы переехал в Питер и устроился в Luxoft</h2><p>— Как ты вышел на Luxoft?</p><p>Я планировал переехать из Казани в Москву и искал работу в столице через hh.ru. Мне позвонила HR-менеджер Luxoft. Мы поговорили, и она уже собиралась назначить собеседование, когда я спросил: «Вы находитесь в Москве?» Она ответила, что нет. Я сказал, что тогда ее предложение мне неинтересно, а HR-менеджер спросила: «А если мы вот такую зарплату предложим?» Так вместо Москвы я переехал в Питер.</p><p>— Я слышала, что в Luxoft очень жесткий отбор и сложные собеседования…</p><p>Собеседование действительно было сложным, но интересным. Оно проходило не в формате вопрос-ответ: мы просто разговаривали с другим разработчиком о разработке, iOS, Git.</p><p>— Как тебе в Luxoft?</p><p>Там очень дружный и отзывчивый коллектив. Мне понравилась легкость, с которой все друг с другом общались: например, у нас не было митингов с отчетами о проделанной работе. Вместо этого мы ходили с руководителем на обед и в это время обсуждали задачи.</p><p>В Luxoft я занимался интересным проектом — делали приложение для клиентов сети АЗС. По-моему, мы одними из первых добавили в приложение возможность использовать виртуальную карту лояльности вместо физической. Тогда эта фича еще не была распространенной.</p><p>— Почему ты оттуда ушел? Это крутое место, многие хотят работать в Luxoft.</p><p>Мне не принципиально где работать и не важно, насколько велика и крута компания. Для меня главное — чтобы было комфортно. На дорогу до офиса и обратно каждый день я тратил по 2-3 часа. К тому же, я переехал в новый город, где никого не знал и одному мне там было неуютно.</p><p>— Одиноко было, наверное?</p><p>Ну да. В общем я решил вернуться в Казань и устроиться в Neti.</p><h2>Как пришел в Neti</h2><p>— Почему именно в Neti?</p><p>Я начал сотрудничать с Neti, еще когда работал в Luxoft. Осенью 2019 года мне написал руководитель проектов и спросил, могу ли я помочь с приложением для застройщика. Клиент хотел загружать в приложение тяжелые документы в формате pdf и оставлять в них замечания. РП вообще не был уверен, что это возможно сделать, а я реализовал функционал нативно, без библиотек. После этого я остался на проекте, а летом 2020 года перешел в штат Neti.</p><p>— И как тебе здесь?</p><p>Здорово. Очень комфортно, все нравится. Много интересных задач. Например, решал прикольную задачку с шахматкой квартир в приложении для риелторов. Делал список, который скроллится вправо, влево, вверх и вниз. Самым сложным было синхронизировать вертикальный и горизонтальный скроллы.</p><h2>Советы начинающим разработчикам</h2><p>— Трудно ли учить языки программирования самостоятельно?</p><p>Когда я начал учить Objective-C, у меня еще не было программисткой базы. Она появилась через год, когда на третьем курсе вуза нас познакомили с ООП, SOLID на примере С#, наследованиями, объявлениями классов, объявлениями методов. Это сильно пригодилось. На самом деле, без базы непросто. Поначалу вообще непонятно что происходит. Потом, где-то через полгода, появляются какие-то проблески и становится более-менее ясно. Но вообще тем, кто хочет стать разработчиком, я рекомендую идти на курсы, если есть такая возможность.</p><p>При самостоятельном обучении ты, конечно, чему-то научишься, но не факт, что будешь делать хорошо и правильно. Можно научиться так, что потом долго придётся переучиваться. А на курсах изначально закладывают правильную базу.</p><p>— У тебя, как у самоучки, была проблема, что ты чему-то неправильно научился и потом пришлось переучиваться?</p><p>Не знаю, скорее всего, была. Но я никогда не задумывался о том, что научился не тому. Скорее, у меня всегда была мысль, что нужно найти команду, у которой можно учиться.</p><p>— Что еще ты мог бы посоветовать начинающим программистам?</p><p>Я бы посоветовал сразу кодить. Когда кодишь, запоминается лучше. Когда появляется свободная минутка, изучать что-нибудь новое. И, конечно, нужно гореть, тогда обучение будет приносить удовольствие.</p><p>— Последний вопрос. Стал ли ты адептом Apple: iPhone, MacBook, Air Pods, iPad? Только Apple и никакого Android.</p><p>Я всегда был адептом Apple. У меня всегда был iPhone. Может, это тоже повлияло на то, чем я занимаюсь. Сейчас у меня просто больше разных Apple-устройств, потому что они связаны с работой. Но я не против Android — на самом деле есть крутые «андроиды».</p>]]></content:encoded>
    </item>
    <item>
      <title>Google представила открытую криптографическую библиотеку Tink</title>
      <link>https://tproger.ru/news/google-tink</link>
      <comments>https://tproger.ru/news/google-tink?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Наташа Маркова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/google-tink</guid>
      <description><![CDATA[<p>Tink поддерживает Java, C++ и Objective-C, экспериментально Go и JavaScript, компания уже применяет её в AdMob, Google Pay и Google Assistant.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/google-tink">Google представила открытую криптографическую библиотеку Tink</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Криптография]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[Golang]]></category>
      <category><![CDATA[Objective-C]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 31 Aug 2018 07:04:09 GMT</pubDate>
      <content:encoded><![CDATA[<p>Google представила <a href="https://github.com/google/tink">открытую криптографическую библиотеку Tink</a> с поддержкой языков Java, C++ и Objective-C, а также экспериментальной поддержкой Go и JavaScript. Примитивы продукта используют форк <a href="https://github.com/google/boringssl">BoringSSL</a> и фреймворк <a href="https://ru.wikipedia.org/wiki/Java_Cryptography_Architecture">Java Cryptography Architecture</a>.</p><h3>Tink</h3><p>Даже небольшие ошибки при использовании криптографических методов могут иметь серьезные последствия, а их тщательное изучение занимает десятилетия, <a href="https://security.googleblog.com/2018/08/introducing-tink-cryptographic-software.html">пишет</a> компания в своем блоге. Многие разработчики не имеют столько времени, поэтому при создании нового инструмента корпорация старалась сократить количество потенциальных ошибок работы с криптографическими API. Компания уже использует Tink в проектах AdMob, Google Pay, Google Assistant, Firebase и Android Search App.</p><h3>Примитивы</h3><p>В основе программного интерфейса лежат следующие примитивы:</p><ul><li>AEAD (Authenticated Encryption with Associated Data) для симметричного шифрования блоков и потоков данных по фиксированному ключу. Инструмент не требует определения конкретных алгоритмов и их параметров. С его помощью можно быстро выполнить операции шифрования и дешифрования:import com.google.crypto.tink.Aead;import com.google.crypto.tink.KeysetHandle;import com.google.crypto.tink.aead.AeadFactory;import com.google.crypto.tink.aead.AeadKeyTemplates;// 1. Generate the key material.KeysetHandle keysetHandle = KeysetHandle.generateNew(AeadKeyTemplates.AES256_EAX);// 2. Get the primitive.Aead aead = AeadFactory.getPrimitive(keysetHandle);// 3. Use the primitive.byte[] plaintext = ...;byte[] additionalData = ...;byte[] ciphertext = aead.(plaintext, additionalData);</li><li>MAC (Message Authentication Codes) предоставляет коды аутентификации сообщений.</li></ul><p>В Tink есть функции создания цифровой подписи и ее проверки, а также функции быстрого гибридного шифрования.</p><h3>Особенности работы</h3><p>Каждый примитив поддерживает работу в <a href="https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB_%D0%B1%D0%B5%D0%B7_%D1%81%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D1%8F">stateless-режиме</a>, безопасные операции копирования и использование ключей длиной от 128 бит. Библиотека автоматически блокирует потенциально небезопасные операции, например, загрузку ключей из незашифрованных файлов на диске. Tink предоставляет API для ротации ключей и взаимодействия с внешними системами управления ключами: <a href="https://cloud.google.com/kms/">Google Cloud KMS</a>, <a href="https://aws.amazon.com/kms/">Amazon KMS</a>, <a href="https://developer.android.com/reference/java/security/KeyStore">Android Keystore</a> и <a href="https://developer.apple.com/documentation/security/keychain_services">Apple iOS KeyChain</a>.</p><p>Библиотека имеет модульную архитектуру, позволяет подключать кастомные примитивы и заменять ими существующие без изменения программного кода конечных приложений. Из Tink можно исключать часть инструментов. Например, если в программе используется только проверка цифровой подписи, то для уменьшения размера кода приложения можно удалить компоненты симметричного шифрования.</p><p>В августе 2018 года создатели VPN-протокола WireGuard <a href="https://tproger.ru/news/wireguard-zinc-for-linux/">объявили</a> о создании криптографической библиотеки Zinc, которая после внедрения в основное ядро Linux ускорит процесс шифрования данных благодаря упрощенному набору криптоалгоритмов.</p>]]></content:encoded>
    </item>
    <item>
      <title>Статический анализ кода: обзор инструмента OCLint</title>
      <link>https://tproger.ru/articles/oclint-by-ryuichi</link>
      <comments>https://tproger.ru/articles/oclint-by-ryuichi?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вячеслав Шарунов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/oclint-by-ryuichi</guid>
      <description><![CDATA[<p>Инструмент OCLint ищет баги и ошибки в программах на C, C++ и Objective-C, которые могут остаться незаметными для компилятора.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/oclint-by-ryuichi">Статический анализ кода: обзор инструмента OCLint</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Инструменты командной строки]]></category>
      <category><![CDATA[Язык Си]]></category>
      <category><![CDATA[Objective-C]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 07 Nov 2017 08:48:02 GMT</pubDate>
      <content:encoded><![CDATA[<p><a href="http://oclint.org/">OCLint</a> — инструмент, разработанный <a href="https://ryuichi.co/labs/">Ryuichi Laboratories</a>, который проверяет программы на С, С++ и Objective-C на наличие следующих багов и ошибок:</p><ul><li>пустые конструкции if/else/try/catch/finally;</li><li>неиспользуемые локальные переменные и параметры;</li><li>использование кода с высокой <a href="https://habrahabr.ru/company/intel/blog/106082/">цикломатической</a> и <a href="https://modess.io/npath-complexity-cyclomatic-complexity-explained/">NPath</a> сложностью;</li><li>избыточное использование конструкций if и ненужных скобок;</li><li><a href="https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B4_%D1%81_%D0%B7%D0%B0%D0%BF%D0%B0%D1%88%D0%BA%D0%BE%D0%BC">код с запашком</a> — использование длинных методов и длинных списков параметров;</li><li>плохие практики написания кода — переназначение параметров, неправильное использование логики.</li></ul><h3>Функциональность OCLint</h3><p><a href="https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%BA%D0%BE%D0%B4%D0%B0">Статический анализ кода</a> призван обнаруживать критические дефекты кода, которые не видны компилятору, но способны обрушить программу в будущем. OCLint автоматизирует процесс проверки кода при помощи расширенных функций:</p><ul><li>Динамическая загрузка правил в систему, даже во время выполнения;</li><li>Гибкие и расширяемые конфигурации программы гарантируют пользователю настройку поведения OCLint именно под нужды каждого;</li><li>Возможность вызова инструмента из командной строки вносит <a href="https://martinfowler.com/articles/continuousIntegration.html">непрерывную интеграцию</a> и постоянную проверку кода в процессе разработки. Это поможет исправлять все баги ещё на этапе разработки;</li><li>Снижена вероятность ложных срабатываний инструмента для избежания ситуаций, когда полезный код может быть помечен как избыточный;</li><li>Эффективность и точность инструмента основана на использовании <a href="https://ru.wikipedia.org/wiki/%D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%82%D0%BD%D0%BE%D0%B5_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE">абстрактного синтаксического дерева</a> исходного кода.</li></ul><h3>Установка инструмента</h3><p>OCLint является автономным инструментом, работающим на платформах Linux и macOS. Получить самую свежую версию 0.13 продукта вы можете, загрузив и самостоятельно скомпилировав <a href="http://oclint.org/docs/intro/build.html">исходный код</a>, либо уже <a href="https://github.com/oclint/oclint/releases">скомпилированные двоичные файлы</a> программы.</p><p>Процесс установки подробно <a href="http://docs.oclint.org/en/stable/intro/installation.html">описан</a> на специальной странице инструмента. Также доступно <a href="http://oclint.org/docs/intro/tutorial.html">руководство пользователя</a> с подробным описанием использования команд инструмента. Продукт распространяется под лицензией Modified BSD.</p>]]></content:encoded>
    </item>
  </channel>
</rss>