Если что, я не настоящий iOS разработчик. В конце прошлого года Лёша спросил меня, не хочу ли я поделать приложение для айфона. Я ответил что конечно хочу, но не умею и вообще ничего в мобильной разработке не понимаю. А он спросил, остановит ли меня такая глупость. Конечно же не остановит, что за бред вообще?
Стек получился примерно такой: SwiftUI, CoreData, VisionKit, Google Firebase, и чуть-чуть UIKit. Пока получается обойтись без CocoaPods, которые работают на наших макбуках с М1 не очень стабильно (если что, библиотеку для работы с Firebase можно поставить через свифтовский менеджер пакетов).
Недавно я прописал операцию записи в Firestore, а сейчас пытаюсь что-то из нее вытащить. Проблема в том, что инструкция с официального сайта Firestore, кажется, устарела - компилятор ругается. Придется изобретать велосипед и разбирать джейсоны руками.
- Богдан
Стек получился примерно такой: SwiftUI, CoreData, VisionKit, Google Firebase, и чуть-чуть UIKit. Пока получается обойтись без CocoaPods, которые работают на наших макбуках с М1 не очень стабильно (если что, библиотеку для работы с Firebase можно поставить через свифтовский менеджер пакетов).
Недавно я прописал операцию записи в Firestore, а сейчас пытаюсь что-то из нее вытащить. Проблема в том, что инструкция с официального сайта Firestore, кажется, устарела - компилятор ругается. Придется изобретать велосипед и разбирать джейсоны руками.
- Богдан
ЛЁША: маленький шажок для настоящих разрабов, огромный для нас: сегодня впервые данные с одного устройства (Богдана) улетели в облако, а потом приземлились на другом (моём). МАГИЯ.
при этом весь процесс сопровождается каким-то неподъёмным количеством ошибок — например, мне только что пришлось снести проект в xcode и склонировать его с гита заново, а Богдан и вовсе говорит, что отчался что-то делать с гитом через xcode и просто работает через консоль. но об этом, наверно, пусть он лучше сам расскажет.
при этом весь процесс сопровождается каким-то неподъёмным количеством ошибок — например, мне только что пришлось снести проект в xcode и склонировать его с гита заново, а Богдан и вовсе говорит, что отчался что-то делать с гитом через xcode и просто работает через консоль. но об этом, наверно, пусть он лучше сам расскажет.
Богдан: (уже поза)вчера перешатал организацию данных в облаке\ теперь данные хранятся, читаются и пишутся настолько дешево, насколько это вообще возможно. А еще поубирал вложенность, в общем, теперь оно не вызывает ощущения что "я опять сделал все не так". Ощущения, которое меня в этом деле преследует почти постоянно. И в большинстве случаев, кажется мне, оправданно.
По какой-то непонятной причине все каноничные инструкции к тому как читать данные из firestore через swift ui не подошли (ну то есть, то не найдет метод, то еще какая-то фигня, хотя в документации все эти методы есть), может быть библиотека firestore которая ставится через пакетный менеджер свифта а не cocoapods какая-то кастрированная? В любом случае, пришлось все разбирать руками, а не через модное codable, пробираться через ошибки вида "не собралось потому что не собралось", а еще XCode просто сошел с ума в плане взаимодействия с гитом (впрочем, XCode стабильностью и предсказуемостью не отличался). А вообще надо на AppCode перекатываться, за время пробного периода он показал себя куда более адекватным вариантом.
Но энивейс, работу с firestore надо еще чуть подпилить, а и из совсем больших задачек которые не относятся к полировке уже написанного останутся AppClip (вообще не знаю, с какой стороны подступаться) и генерация pdf (знаю, откуда подступаться, но все равно предстоит жесть).
По какой-то непонятной причине все каноничные инструкции к тому как читать данные из firestore через swift ui не подошли (ну то есть, то не найдет метод, то еще какая-то фигня, хотя в документации все эти методы есть), может быть библиотека firestore которая ставится через пакетный менеджер свифта а не cocoapods какая-то кастрированная? В любом случае, пришлось все разбирать руками, а не через модное codable, пробираться через ошибки вида "не собралось потому что не собралось", а еще XCode просто сошел с ума в плане взаимодействия с гитом (впрочем, XCode стабильностью и предсказуемостью не отличался). А вообще надо на AppCode перекатываться, за время пробного периода он показал себя куда более адекватным вариантом.
Но энивейс, работу с firestore надо еще чуть подпилить, а и из совсем больших задачек которые не относятся к полировке уже написанного останутся AppClip (вообще не знаю, с какой стороны подступаться) и генерация pdf (знаю, откуда подступаться, но все равно предстоит жесть).
Лёша: по неизвестной ни одной живой душе причине приложение собралось и заработало на новой версии операционной версии “Айоэс” без проблем.
Богдан: обновил XCode с бигсюром и теперь проект просто не собирается. Как и ожидалось.
они опять делают стартап OÜ
Богдан: обновил XCode с бигсюром и теперь проект просто не собирается. Как и ожидалось.
Лёша: у меня всё собирается.
Лёша: часто спрашивают, что мы вообще делаем, а мы как две суеверные бабульки ссым рассказать, пока не заработает хоть как-то. я, наверно, готов поделиться главным: вам (и нам) это совершенно точно не нужно, ни одну на свете проблему продукт не решает, и конкурирует сразу с миллионом уже существующих приложений. а, и ещё по ряду причин аёс-онли.
Про то, каково делать продукт под аудиторию, которой ты сам точно не являешься, надо будет потом отдельным пост написать. Я буквально иногда запускаю билд и такой: как красиво… зачем это кстати нужно вообще
Про то, каково делать продукт под аудиторию, которой ты сам точно не являешься, надо будет потом отдельным пост написать. Я буквально иногда запускаю билд и такой: как красиво… зачем это кстати нужно вообще
Богдан: с днём очередного "надо было сразу enum сюда вписывать а не bool".
Вот когда я уже запомню, что даже если я уверен что в каком-то филде кроме true и false ничего быть не может, обязательно настанет момент, когда понадобится еще какое-то состояние. А может и два, или даже три.
Вот когда я уже запомню, что даже если я уверен что в каком-то филде кроме true и false ничего быть не может, обязательно настанет момент, когда понадобится еще какое-то состояние. А может и два, или даже три.
Лёша: сегодня поговорим о дизайне. Я хотел быстро описать три интерфейсных проблемы, с которыми я сейчас сражаюсь, но в итоге даже первая (меньшая) из них вылилась в достаточно крупный пост/мольбу о помощи. https://telegra.ph/Cvet-volshebstva-09-26
Telegraph
Цвет волшебства
В нашем интерфейсе есть несколько вещей, от которых мне очень худо. Это прежде всего цвета, ушки и текстовое поле. Я хотел написать обо всех трёх, но неожиданно даже первая тема вылилась в довольно крупный пост, так что начнём с ЦВЕТА В своей эстетике приложение…
Лёша: к прошлому посту прислали несколько очень подробных советов, спасибо огромное!
Forwarded from Артём Фёдоров
Привет! Спасибо за то что ведешь канал ,)
Я по поводу твоей заметки
Есть на примете два сервиса в которые можно сгрузить 8 hex и он продолжит (попытается продолжить) ряд: https://colors.dopely.top/palette-generator/ и
https://coolors.co/
Во втором можешь выбрать метод генерации новых цветов но там всего 10 цветов, в первом — 15
Разложить палитру, которая подходит и потом генерить дополнительные цвета между пятью выбранными (я бы строил ряды между самыми светлыми (чтобы не выходить из обозначенного уже ранее контура по свету, а его отхождение мы лучше всего чувствуем): для проверки этого два цвета положить на белый и режим наложения Luminocity — там где будет светлее серый, тот и светлее — для проверки светлости тоже есть сервисы) и таким образом постоянно увеличивая палитру.
Если результат кажется каким то неудовлетворительным, или какие-то цвета сильно выбиваются, то я бы воспользовался для донастройки еще одним (или всеми) из трех сервисов:
https://palettte.app/ — с помощью сервиса выравнивать цвета по HSV (применяя интерпоряцию)
https://javier.xyz/cohesive-colors/ — пользуясь цветом который накладывается поверх всех через overlay (тут можно сгружать бесконечное число hex)
https://colormixer.web.app/02332971ff4dbe08ff9bc95164440301ffff7c5f55610300/Sunset — близко к предыдущему варианту (тут 12 hex)
PS есть еще http://khroma.co/ которую можно обучить подбирать только пастельные палитры. Если в твоем случае цветом много на смешении, но их количество в любом случае ограничено для смешивания — то может подойти)
Я по поводу твоей заметки
Есть на примете два сервиса в которые можно сгрузить 8 hex и он продолжит (попытается продолжить) ряд: https://colors.dopely.top/palette-generator/ и
https://coolors.co/
Во втором можешь выбрать метод генерации новых цветов но там всего 10 цветов, в первом — 15
Разложить палитру, которая подходит и потом генерить дополнительные цвета между пятью выбранными (я бы строил ряды между самыми светлыми (чтобы не выходить из обозначенного уже ранее контура по свету, а его отхождение мы лучше всего чувствуем): для проверки этого два цвета положить на белый и режим наложения Luminocity — там где будет светлее серый, тот и светлее — для проверки светлости тоже есть сервисы) и таким образом постоянно увеличивая палитру.
Если результат кажется каким то неудовлетворительным, или какие-то цвета сильно выбиваются, то я бы воспользовался для донастройки еще одним (или всеми) из трех сервисов:
https://palettte.app/ — с помощью сервиса выравнивать цвета по HSV (применяя интерпоряцию)
https://javier.xyz/cohesive-colors/ — пользуясь цветом который накладывается поверх всех через overlay (тут можно сгружать бесконечное число hex)
https://colormixer.web.app/02332971ff4dbe08ff9bc95164440301ffff7c5f55610300/Sunset — близко к предыдущему варианту (тут 12 hex)
PS есть еще http://khroma.co/ которую можно обучить подбирать только пастельные палитры. Если в твоем случае цветом много на смешении, но их количество в любом случае ограничено для смешивания — то может подойти)
Telegram
(Заметим в скобках, что)
Лёша: сегодня поговорим о дизайне. Я хотел быстро описать три интерфейсных проблемы, с которыми я сейчас сражаюсь, но в итоге даже первая (меньшая) из них вылилась в достаточно крупный пост/мольбу о помощи. https://telegra.ph/Cvet-volshebstva-09-26
Лёша: чтобы активировать девелоперский эпол аккаунт от организации, нужно узнать знать её D-U-N-S Number. вернее, сначала его нужно получить на каком-то американском сайте из девяностых, который по любому поводу выдаёт вам безинформативную ошибку. вернее, ошибка информативная и гласит “пожалумста, не используйте спецсимволы” — но они и так нигде и не используются. опытным путём удалось установить, что под спецсимволами сайт понимает ЦИФРЫ СУКА (при этом чтобы получить DUNS вам нужно указать адрес и телефон). окей, ещё немного мудохания и понимаешь, что цифры считаются спецсимволами в одном конкретном поле — postcode. будете регистрировать компанию — не указывайте индекс, поцаны. наконец, нужно указать код деятельности (SIC code), причём предложенный классификатор выдаёт какие-то фундаментальные типы деятельности. у нас развлекательное приложение для студенток младших курсов, какая металлургия, какие агрикультуры? немного поисковых запросов, и находим, что для разработческой деятельности код 7371 или 7372 (“7371 is used by Computer Programming Services, while 7372 is used by Prepackaged Software” — я выбрал второй). следующих шаг и перед нами босс: вопрос, который нельзя пропустить — “Please indicate only one category that describes the relationship you have or plan on seeking for providing goods and services under the legal business name you indicated” и варианты ответа: “Федеральный государственный подрядчик или поставщик” и “Федеральный государственный грантообеспечитель или грантополучатель”, “оба перечисленных варианта”. ПРОСТО ЧТО, какой государственный подрядчик соединённых штатов америки, я просто хочу приложение в эпстор положить. рандомный сайт в интернете говорит выбирать первую опцию и не думать, верим ему.
что ж, DUNS получен, теперь нужно передать его эплу, тут ведь проблем не возникнет, да?
тут ведь проблем не возникнет, да?
“мы заблокировали ваш энроллмент, позвоните нам”. и вот я, абсолютно охуевший, звоню в эпол и пытаюсь понять, что там они мне заблокировали и как это разблокировать. прислали письмо, говорят, хотят мой международный паспорт. окей.
upd: эпол прислали письмо, в котором сказали, что паспортные данные надо передать по ссылке, которую они отправили во втором письме. второе письмо они не отправили.
что ж, DUNS получен, теперь нужно передать его эплу, тут ведь проблем не возникнет, да?
тут ведь проблем не возникнет, да?
“мы заблокировали ваш энроллмент, позвоните нам”. и вот я, абсолютно охуевший, звоню в эпол и пытаюсь понять, что там они мне заблокировали и как это разблокировать. прислали письмо, говорят, хотят мой международный паспорт. окей.
upd: эпол прислали письмо, в котором сказали, что паспортные данные надо передать по ссылке, которую они отправили во втором письме. второе письмо они не отправили.
Лёша: наше юрлицо зарегано в Эстонии, потому что это суперудобно и бесконечно выгодно (об этом как-нибудь ещё напишу). такой тип компании называется OÜ (аналог российского ООО или американского LLC). так вот, эпол у себя на сайте требует, чтобы юрлицо было указано точь-в-точь как в бумагах, при этом отказывается есть букву Ü 🤡
Лёша: я очень люблю колоргрейдинг, поэтому сейчас получаю огромное удовольствие, монтируя заявку для стартап-визы.
последовательность нод, которую я использую, я подсмотрел у Виталия Бужана — гениального колориста из Казахстана, который ведёт ютуб канал о покраске видео, и который на три головы выше не только своих русскоязычных коллег, но и большинства англоязычных каналов, которые можно найти по DaVinci.
последовательность нод, которую я использую, я подсмотрел у Виталия Бужана — гениального колориста из Казахстана, который ведёт ютуб канал о покраске видео, и который на три головы выше не только своих русскоязычных коллег, но и большинства англоязычных каналов, которые можно найти по DaVinci.
Богдан: Так сложилось, что нельзя просто так взять и создать в ХКоде проект - у каждого из них должен быть идентификатор, и он должен быть привязан к какой-то организации. В самом начале этой организацией был я (создал какой-то эппол девелопер аккаунт), и это казалось какой-то не очень важной формальностью. Но потом обстоятельства придавили и пришлось переписывать все на наше уютное эстонское OÜ (о том, как больно было привязывать его к эпплу Лёша уже кажется тут погорел). Казалось бы - просто заходишь в настройки проекта и переписываешь пару полей, но нет! Инструкция как это делать оказалась длиннее психологической границы допустимого в три пункта, а потому я решил, что лучше всего будет создать проект с правильным владельцем с нуля. Ну поперетаскивать файлы с кодом из одного проекта в другой руками, что же тут может пойти не так? А много что.
Я перетащил все файлы и папки, ассеты, даже разметка базы данных перенеслась, все что надо переименовал, на firebase проект пересоздал, успешно запустил и проверил приложение у себя, засунул под гит и сказал Лёше что можно делать git pull и все должно заработать. Вдруг Лёша пишет что у него не собирается… Нет двух файлов. У меня есть, а у него почему-то нет, притом все под гитом, ну что за бред? Оказалось, что панель с файлами и папками в ХКоде вообще не отражает реальное положение дел. У меня уже были смутные подозрения на этот счет, но не настолько. Может оказаться, что он показывает что какой-нибудь Х.swift лежит в папке А, а он на самом деле находится где-то в папке B лежащей в С. Что, собственно, и произошло - эти два потерянных у Леши файла остались лежать в папке с прошлым проектом. То есть, ХКод показывает что они на месте, гит в папке проекта их не видит (еще бы, они в другом проекте что ты мне сделаешь), и выходит то, что выходит.
В любом случае, с этим разобрались, и наш проект привязан к эппл девелопер правильно. По непонятной причине Лёша даже смог загрузить его в testflight без каких-либо проблем. И теперь я наконец-то могу начать делать appClip.
Я перетащил все файлы и папки, ассеты, даже разметка базы данных перенеслась, все что надо переименовал, на firebase проект пересоздал, успешно запустил и проверил приложение у себя, засунул под гит и сказал Лёше что можно делать git pull и все должно заработать. Вдруг Лёша пишет что у него не собирается… Нет двух файлов. У меня есть, а у него почему-то нет, притом все под гитом, ну что за бред? Оказалось, что панель с файлами и папками в ХКоде вообще не отражает реальное положение дел. У меня уже были смутные подозрения на этот счет, но не настолько. Может оказаться, что он показывает что какой-нибудь Х.swift лежит в папке А, а он на самом деле находится где-то в папке B лежащей в С. Что, собственно, и произошло - эти два потерянных у Леши файла остались лежать в папке с прошлым проектом. То есть, ХКод показывает что они на месте, гит в папке проекта их не видит (еще бы, они в другом проекте что ты мне сделаешь), и выходит то, что выходит.
В любом случае, с этим разобрались, и наш проект привязан к эппл девелопер правильно. По непонятной причине Лёша даже смог загрузить его в testflight без каких-либо проблем. И теперь я наконец-то могу начать делать appClip.
Лёша: грустные новости! стартап-комитет Эстонии решил, что мы пока на слишком ранней стадии, чтобы подаваться на их программу. в принципе, ничего критичного, но грустно, конечно — очень многие вещи стали бы проще (упрощённая подача на ВНЖ). но совсем расстраиваться не стоит, говорят — запустите приложение и приходите. продолжаем работать.
Богдан: пришлось ненадолго (несколько недель) оторваться от приложения на всякую бытовуху вроде защиты кандидатской и дописывание давно висящей статьи, ну вы понимаете. Но эти несколько недель прошли, и теперь самое время вспомнить на чем именно я остановился.
У нашего приложения есть кнопка которая должна генерировать pdf по определенному шаблону, а потом его открывать. В принципе, есть два основных способа сделать пдф - использовать специальные библиотеки именно для рисования пдф, или сперва сверстать страницу в более удобном формате (например… html?) и потом уже ее сконвертировать в пдф.
Сначала я пошел по первому пути, попробовал несколько библиотек и… ни одна из них не вызвала особого желания с ней связываться. Или я что-то не так делаю, или не понимаю каких-то совершенно элементарных вещей, или запись пдф файлов на айфоне с SwiftUI это действительно не самое приятное занятие. Я не готов отвергнуть ни одну из этих версий, но тем не менее, переметнулся к варианту 2.
У второго варианта, делать все через html, есть неоспоримое преимущество - все же html файл это вполне себе человекочитаемая строка с которой все, в принципе, понятно. Гораздо приятнее работать с чем-то понятным чем с бинарными данными мутного формата которые не можешь потрогать напрямую.
Лёша собрал мне шаблон в html (перегнал из фигмы), я прошёлся по нему напильником, и задача верстки как таковой стала довольно примитивной - просто собрать строку из уже готовых кирпичей и засунуть в нее нужные значения. Картинки не проблема - просто эмбедится noscript, и мы все еще влезаем в один файл. Здесь возникает вопрос с шрифтами… и здесь мне надо будет еще подумать.
Оказалось, что перегнать html-форматированную строку в pdf проще простого, буквально первое предложенное решение на стековерфлоу подошло, оно даже сохраняло этот пдф в файл на устройстве. И вот тут настал тот самый момент на котором я застрял несколько месяцев назад - я не могу его открыть. То есть, я знаю путь до файла, и конечно через проводник айфона от найдется, но дело в том, что файл должен открываться по нажатию на кнопку. На ту самую, которая триггернула создание этого файла. Хотя казалось бы, самое сложное позади, вот путь до файла, его надо просто открыть. Вот почему так?
У нашего приложения есть кнопка которая должна генерировать pdf по определенному шаблону, а потом его открывать. В принципе, есть два основных способа сделать пдф - использовать специальные библиотеки именно для рисования пдф, или сперва сверстать страницу в более удобном формате (например… html?) и потом уже ее сконвертировать в пдф.
Сначала я пошел по первому пути, попробовал несколько библиотек и… ни одна из них не вызвала особого желания с ней связываться. Или я что-то не так делаю, или не понимаю каких-то совершенно элементарных вещей, или запись пдф файлов на айфоне с SwiftUI это действительно не самое приятное занятие. Я не готов отвергнуть ни одну из этих версий, но тем не менее, переметнулся к варианту 2.
У второго варианта, делать все через html, есть неоспоримое преимущество - все же html файл это вполне себе человекочитаемая строка с которой все, в принципе, понятно. Гораздо приятнее работать с чем-то понятным чем с бинарными данными мутного формата которые не можешь потрогать напрямую.
Лёша собрал мне шаблон в html (перегнал из фигмы), я прошёлся по нему напильником, и задача верстки как таковой стала довольно примитивной - просто собрать строку из уже готовых кирпичей и засунуть в нее нужные значения. Картинки не проблема - просто эмбедится noscript, и мы все еще влезаем в один файл. Здесь возникает вопрос с шрифтами… и здесь мне надо будет еще подумать.
Оказалось, что перегнать html-форматированную строку в pdf проще простого, буквально первое предложенное решение на стековерфлоу подошло, оно даже сохраняло этот пдф в файл на устройстве. И вот тут настал тот самый момент на котором я застрял несколько месяцев назад - я не могу его открыть. То есть, я знаю путь до файла, и конечно через проводник айфона от найдется, но дело в том, что файл должен открываться по нажатию на кнопку. На ту самую, которая триггернула создание этого файла. Хотя казалось бы, самое сложное позади, вот путь до файла, его надо просто открыть. Вот почему так?