Pull to refresh
2
Виталий Подольский@DevlabStudio

iOS software engineer

5
Subscribers
Send message

Всем привет!

У меня сейчас 4 активных пет-проекта для платформы Apple, но скоро выйдут и другие приложения:

  • Ruble - exchange rates of CBRF

  • AssetsGen

  • ColorsGen

  • Pingler

Ruble, позволяет удобно отслеживать курсы рубля в статус баре. Работает на macOS. Абсолютно бесплатен!

AssetsGen, помогает готовить графику для среды xcode и генерирует палитры цветов для приложений. Работает на macOS. Абсолютно бесплатен!

ColorsGen, генератор палитры цветов. Работает на macOS, iOS, iPadOS. Абсолютно бесплатен!

Pingler, простая, но довольно эффективная пинговалка сайта в поисковые системы для ускорения индексации. Работает на macOS, iOS, iPadOS. Абсолютно бесплатен! В последней версии поддержали технологию IndexNow для ускорения индексации страниц. Активно пользуюсь этим приложением, результаты радуют!

Практически все делалась для себя, решил бесплатно опубликовать в AppStore.

Загрузить можно через сайт: https://onlyapps.org, в меню "Projects".

Помню пользовал старое приложение, там можно было размер шрифта выставлять... Круто, что появилось отдельное приложение, но по сути вы мне сайт на телефон установили. Я обычно делаю шрифт для чтения чуть больше, а здесь не получилось настроить, на айфон про макс контент мелковат.

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

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

Вот, что в итоге удалось добиться!

Вот только недавно делал похожие вещи в своем проекте, страдать пришлось =). Но там из-за версии нельзя было Layout использовать, пришлось читать размер View через GeometryReader в расширении View

import SwiftUI

extension View {
    func readSize(onChange: @escaping (CGSize) -> Void) -> some View {
        background(
            GeometryReader { geometryProxy in
                Color.clear
                    .preference(
                        key: SizePreferenceKey.self,
                        value: geometryProxy.size
                    )
            }
        )
        .onPreferenceChange(
            SizePreferenceKey.self,
            perform: onChange
        )
    }
}

private struct SizePreferenceKey: PreferenceKey {
    static var defaultValue: CGSize = .zero
    static func reduce(value: inout CGSize, nextValue: () -> CGSize) {}
}

Вот такой костыль вбивался, а после уже пересчет доступного пространства происходил.

Очень познавательно. Используя с недавних пор Task, я не удосужился проверить как он работает с приоритетами =)

Отличное руководство по отладке в консоли, только не все используют

Apple потихоньку решает проблемы навигации в SwiftUI, но к сожалению они не поддержали более ранние версии ОС.

Какой то сюр! Мы не так давно оплачивали аккаунт компании в РФ, картой компании на физлицо, выданной в другой стране. И так сделали не только мы. Не проверяют принадлежность карты, даже к стране, как оказалось.

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

Интересно бы узнать конкретику - на какой доле железа Эппл xCode столь медлителен что ему нужно уксорение по подписке? 

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

Я ради интереса стал использовать на одном из проектов, пока нравится, лень существующий комбайн настраивать для своей поделки и выделять под это дело железо.

Как я разобрался, это облачный ускоритель для обязательно уже имеющегося xCode - быстро выполняет сборку проекта и тесты, берёт деньги за потраченное время.

Неа, мой икскод быстрей собирает и тестирует. Так что тут все же отсылка не перекладку части задач в облако.

Playgrounds 4

Уже можно писать довольно простые приложения и загружать их в стор. Превью Канвы работает очень шустро, можно подключать зависимости через SPM. Тесты писать нельзя. Пока больше похоже на баловство! Удобно сделана синхронизация между плейграундом планшета и десктопа. Не очень удобно работать со структурой проекта. Нельзя добавить существующий проект из икскод, даже если он целиком написан на SwiftUI и использует SPM, копипастить можно, но муторно.

Очень интересно. Спасибо. Как раз собирал информацию про продвижение в десктопном сторе, а тут рассылка подоспела. Исторически данный стор более платежеспособен, но порог входа намного выше.

В любом случае, спасибо за материал! Уверен, что в гугле он будет найдет по запросу, когда возникнет у кого подобная проблема. А BigSur достаточно хорош, если не использовать его в связке с Xcode 12.3 (проблема вечной переиндексации), я даунгрейд Xcode только сделал. Ну и перед праздниками решился и перешел на м1, тут уже без вариантов, только последнюю ось можно использовать.

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

Или я один не понял?
Это вводная часть серии по организации бека для мобильных приложений. То, что очевидно для веба (докер и микросервисы), не совсем очевидно для мобайла. Именно потому многие и пользуют firebase, кажется, что самому не стоит заморачиваться. Здесь же, кому из мобайла интересна тема, смогут поиграться с докером и почитать про вапор. Ну а дальше должно быть много примеров и практики.
Нет. Только для ios 13. Для предыдущих версий хорошо работает Starscream.
1) Синглтон и свойство dataArray. Массив никак не освобождается, при каждом запросе данные добавляются и передаются из массива в комплишен. Рано или поздно, приложение ляжет намертво или будет ужасно тормозить. Это первый момент.

2) Второй момент. У вас подписка на тиковую историю, причем подписка не унифицирована и как явное значение передается в каждом методе. К примеру, если получать информацию по сотне инструментов, придется создать сотню методов на подписку и столько же на отписку. Почему не использовать дженерик и не унифицировать запрос?

3) Вы никак не обрабатываете обрыв соединения. С учетом того, что в случае синглтона, менеджер был инициирован однажды, по сути, он не может быть пересоздан. Я бы переписал пример без «вечного» объекта и эту строку вынес бы в конструктор:

let webSocketTask = URLSession(configuration: .default).webSocketTask(with: URL(string: "wss://ТУТ_ВАШ_АДРЕС"*))

4) Метод getData() содержит вот такой гард:

guard let self = self else { return }

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

self?.dataArray = ...
прекрасно отработает внутри метода.
Можете подсказать зачем импортируется cfnetwork? Сколько не смотрел, не нашел его использование.

Ну и уточняющий момент: webSocketTask доступен начиная с айос13 в urlsession. Вы не поддерживаете предыдущие версии ос?
Спасибо за материал. Но юдеми ограничен рамками купленного курса. Для многих новичков полезны ещё курсы Скутаренко и Swiftbook. Советую покрутить на досуге.
Интересно, а возможно из хендлера пуш-уведомления регистрировать задачу процессинга? Или всё упрётся в тайминги запуска ОС и регистрацию в делегате приложения?

BGTaskScheduler.shared.register(
    forTaskWithIdentifier: "pl.snowdog.example.train",
    using: DispatchQueue.global()
  ) { task in
       self.handleMLTrain(task)
     }


К примеру, отдать через скрытый пуш новые данные для обучения ML и только после этого зарегистрировать задачу на обучение.

Information

Rating
6,618-th
Location
Белград, Белград, Сербия
Date of birth
Registered
Activity

Specialization

Десктоп разработчик, Разработчик мобильных приложений
Ведущий