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

Не бойтесь начать: история нашего первого приложения в AppStore

Уровень сложностиПростой
Вот что получилось 😂
Вот что получилось 😂

Привет! Меня зовут Юра, а моего друга – Игорь. Мы начинающие разработчики, и хотим поделиться своей историей, чтобы вдохновить других не бояться начинать свои проекты.

Три месяца назад мы с Игорем решили создать приложение. У нас не было много опыта, но было огромное желание творить. Мы столкнулись с множеством трудностей: от изучения Swift до разработки дизайна и публикации в AppStore.

CleaneXTool
CleaneXTool

https://apps.apple.com/ru/app/cleanxtool/id6499000240?mt=12

Одной из главных сложностей стало изучение GitHub. Мы быстро поняли, что для эффективной совместной работы над проектом нам нужен инструмент контроля версий. GitHub стал для нас настоящим спасением.

Но не обошлось без ошибок. Мы несколько раз теряли части кода, потому что не разобрались в тонкостях слияния (merge) на GitHub. Приходилось восстанавливать проект практически с нуля, что было нелегко, но зато мы набили много шишек и теперь знаем, как правильно работать с Git.

Еще одним испытанием стал процесс получения сертификата разработчика Apple Developer Program. Это был долгий и волнительный путь, полный бюрократических процедур и технических сложностей.

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

В итоге, мы справились со всеми трудностями и наше приложение наконец-то увидело свет! Это был невероятный опыт, который научил нас многому.

Кусочки кода реализации разрешения доступа к папке 😊

import Foundation
import AppKit


/// Функция создает экземпляр класса NSOpenPanel, который представляет собой диалоговое окно для открытия файлов и папок.
/// Настраивает диалоговое окно:
/// Разрешает выбор только папок.
/// Задает начальный каталог как "/Users/(currentUser)/Library/Developer/Xcode/DerivedData/".
/// Открывает диалоговое окно.
/// Если пользователь выбрал папку и нажал кнопку "OK":
/// Проверяет, является ли выбранная папка подпапкой "/Users/(currentUser)/Library/Developer/Xcode/DerivedData/".
/// Если да, вызывает блок завершения (completion) с массивом CellForFile, который представляет собой список найденных папок.
/// Если нет, отображает сообщение об ошибке и снова открывает диалоговое окно.
/// - Parameters:
///   - currentUser: имя пользователя
///   - completion: блок завершения arrayFolders
func openDerivedDataFolder(currentUser: String, completion: @escaping ([CellForFile]) -> Void) {
    let openPanel = NSOpenPanel()
    openPanel.canChooseDirectories = true
    openPanel.canChooseFiles = false
    openPanel.allowsMultipleSelection = false
    openPanel.directoryURL = URL(fileURLWithPath: "/Users/\(currentUser)/Library/Developer/Xcode/DerivedData/") // каталог по умолчанию
    openPanel.title = "Choose folder DerivedData"
    openPanel.prompt = "Choose"
    openPanel.message = "Choose folder DerivedData"
    openPanel.begin { response in
        if response == .OK, let url = openPanel.urls.first {
            // проверка является ли выбранная папка DerivedData
            if url.path.hasPrefix("/Users/\(currentUser)/Library/Developer/Xcode/DerivedData") {
                let arrayFolder = CellForFile.getFoundFolders()
                completion(arrayFolder)
            } else {
                // Показать сообщение об ошибке, что выбрана неверная папка
                let alert = NSAlert()
                alert.messageText = "Folder not verified"
                alert.informativeText = "The folder you selected is not the DerivedData folder."
                alert.alertStyle = .warning
                alert.addButton(withTitle: "OK")
                alert.runModal()
                // После показа сообщения об ошибке снова открываем окно выбора папки
                openDerivedDataFolder(currentUser: currentUser, completion: completion)
            }
        }
    }
}

Вот несколько советов, которые мы хотели бы дать начинающим разработчикам (и не только!)

  • Не бойтесь начинать. Первый шаг всегда самый сложный, но он же и самый важный. Не ждите идеального момента, просто начните!

  • Верьте в себя. Не позволяйте никому говорить вам, что у вас ничего не получится.

  • Учитесь на своих ошибках. Ошибки – это часть процесса обучения. Не бойтесь их совершать, главное – извлекать из них уроки.

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

  • Наслаждайтесь процессом! Разработка – это не только работа, но и творчество. Получайте удовольствие от того, что вы делаете.

Помните: нет ничего невозможного! Если мы с Игорем, не имея опыта, смогли создать приложение и опубликовать его в AppStore, то значит, сможете и вы.

Не бойтесь начать свой проект!

Удачи!

Юра и Игорь

P.S. Если у вас есть какие-либо вопросы или вам нужна помощь, не стесняйтесь обращаться к нам.

@martynenko_uriy

@igorkrisin

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.