Ответы пользователя по тегу iOS
  • Можно ли использовать шрифт San Francisco в платном приложении?

    ivanvorobei
    @ivanvorobei
    iOS разработчик, канал https://t.me/sparrowcode
    Для этого есть лицензии шрифта. Используйте SF в коммерческих - ограничения нет. И SFSymbols тоже.
    Ответ написан
    1 комментарий
  • Home indicator меняет цвета?

    ivanvorobei
    @ivanvorobei
    iOS разработчик, канал https://t.me/sparrowcode
    Цвет индикатора изменить нельзя.
    Есть хитрости как сделать его белым или черным, но это те еще костыли.
    Ответ написан
    2 комментария
  • Как решить "AppStore: Missing App Icon..."?

    ivanvorobei
    @ivanvorobei
    iOS разработчик, канал https://t.me/sparrowcode
    Теперь иконка разрешением 1024x1024 хранится в проекте. Если у вас не появилась она в паке для иконок (обычно внизу), то удалите пак и создайте заново, заполнив все иконки. На скриншоте нужная в самом низу - AppStore iOS 1024pt

    5dca8cffe56ee334100482.png

    Чтобы создать новый пак, нажмите на плюс внизу и выберите следующий пункт:
    5dca8db9a0a84034794716.png

    Раньше выгружалась без ошибки, потому что иконку загружали вручную в AppStoreConnect.
    Ответ написан
    2 комментария
  • Как создать несколько UIView через цикл?

    ivanvorobei
    @ivanvorobei
    iOS разработчик, канал https://t.me/sparrowcode
    Так как вы написали:

    Пытаюсь разобраться в разработке интерфейсов под Ios

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

    Назовем один товар ячейкой. Если ячейка должна занимать весь экран от края до края по ширине - используйте UITableView (называют таблицей), если ячеек по ширине может быть несколько - используйте UICollectionView (называют коллекцией).

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

    Метод для количества элементов в таблице:
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int

    Как видите, возвращает целое число.

    Метод для возрата вью, для таблицы вернуть объект UITableViewCell:
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

    Просто UIView вернуть нельзя, она не реализует протокол для переиспользования. Но в UITableViewCell можно положить любые вью, которые вы хотите. Это своего рода контейнер. Перед использованием класса ячейки, нужно зарегистрировать класс.

    На моем канале есть ролик про переиспользование в таблице. На сайте эпл можно почитать про таблицу и коллекцию.

    Это основная концепция. Вам предстоит узнать что такое DataSource, Delegate, размеры, Layout (для коллекции). Не пугайтесь, про это написано много туториалов даже на русском.

    P.S. Автор захотел решить задачу с помощью цикла и кодом, привожу пример:
    Вынесем значение Y за цикл. Можно объявить здесь же параметры высоты и ширины:
    var currentY: CGFloat = 0
    let width: CGFloat = 375
    let height: CGFloat = 100
            
    for i in 0...3 { 
    
    }

    В цикле будем генерировать вью и ее настраивать. Лейаут subviews можно сделать там же:
    for i in 0...3 {
                var view = UIView()
                view.frame = CGRect.init(x: 0, y: currentY, width: width, height: height)
                currentY += view.frame.height + 10
    }

    Я приведу только генерацию вьюхи. Как размещать элементы внутри вы уже знаете. 10 - это отступ между вьюхами.
    Ответ написан
    2 комментария
  • Интернет на iOS не работает после переключения WIFI на другую точку доступа. Решение?

    ivanvorobei
    @ivanvorobei
    iOS разработчик, канал https://t.me/sparrowcode
    Давай думать. Посмотри в настройках модема службу DHCP, она раздает IP-ники. Проверь IP-ник в настройках телефона, попробуй для двух точек доступа зарезервировать конкретный IP для мобилки.

    Если не помогло, и с другими устройствами точки работать нормально, боюсь предположить что у тебя 5-ый / 6-ой / 7-ой айфон собранный из палок (реф короче). Тогда попробуй поставить бету 13.1, там как раз обновили прошивку модема. Вдруг поможет.

    Проверь какие каналы поддерживает модем и устройство. Для 5 герц актуально. Скорее всего айфон не видел бы сеть, если не поддерживает канал, но мало ли. Возможно перезагрузка переключает канал и после этого инет работает.

    Нужно больше инфо чтобы сказать что-то конкретнее.
    Ответ написан
    Комментировать
  • Как удалить кэш у пользователей приложения iOS при выпуске обновления?

    ivanvorobei
    @ivanvorobei
    iOS разработчик, канал https://t.me/sparrowcode
    Возможно вы изменили структуру БД и не сделали миграцию.

    Кэша, который мог бы навредить, нету в iOS разработке.
    Ответ написан
    3 комментария
  • Можно ли установить язык показываемого ViewController вне зависимости от языка устройства?

    ivanvorobei
    @ivanvorobei
    iOS разработчик, канал https://t.me/sparrowcode
    Код:

    func getFrenchString(forKey key: String) -> String {
        if let currentLanguage = (NSUserDefaults.standardUserDefaults().arrayForKey(AppleLanguages)?.first as? String) {
            if currentLanguage == "fr" {
                return NSLocalizedString(key, comment: "")
            }
            else {
                //the application is not currently on `fr`
                //change application to `fr`
                NSBundle.setLanguage("fr")
    
                //get the localized string on `fr`
                let frString = NSLocalizedString(key, comment: "")
    
                //return the application to the old language
                NSBundle.setLanguage(currentLanguage)
    
                return frString
            }
        }
    
        return ""
    }


    Как это работает
    Предпочитаемый язык хранится в NSUserDefaults, чтобы получить значение по ключу для конкретной локализации, временно меняем язык на Французский (вы можете поменять на любой другой), получаем значение и возвращаем оригинальный язык.

    Уверен, сможете сделать метод универсальным: к примеру, чтобы получал идентификатор локали как параметр в методе.
    Ответ написан
    Комментировать
  • Каким образом реализовать хранение данных в мобильном приложении ios с вопросами и ответами на них?

    ivanvorobei
    @ivanvorobei
    iOS разработчик, канал https://t.me/sparrowcode
    Конечно JSON, даже не сомневайся.
    Архитектура правильная, чуть шлифануть:

    {
       "id": "1", //  всё отлично
       "title": "Какой формы земля?", // можно question
       "type": "buttons", // Если это стиль отображения, тогда сделай массив. Если тип вопроса - всё ок
       "answers" {
          "correct": "Плоская"
          "incorrect": ["Круглая", "Квадратная", "Ромбовидная"]
       }
    }


    Для ответов обновил иерархию, неправильные ответы в массив. Правильные ответы хорошо бы тоже в массив.

    UPD2:
    А где правильнее хранить json файл?

    Если вопросы добавлять редко, то локально. Ради потенциальной возможности исправить ошибку мучать http не стоит)
    Ответ написан
    3 комментария
  • Как получить файл из Realm?

    ivanvorobei
    @ivanvorobei Автор вопроса
    iOS разработчик, канал https://t.me/sparrowcode
    Делаем объект Data:

    let data = try Data(contentsOf: realmURL)

    realmURL в моем случае это fileURL из вопроса.
    Сохраняем с расширением:

    guard let shareFile = data.toFile(fileName: "debt-backup", extenshion: "debt") else { return }


    Метод toFile:

    func toFile(fileName: String, extenshion: String) -> URL? {
            
            if let directory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
                
                let fileURL = directory.appendingPathComponent(fileName + "." + extenshion)
                
                do {
                    try self.write(to: fileURL)
                    return fileURL
                }
                catch {
                    print("Error writing the file: \(error.localizedDescription)")
                }
            }
            
            return nil
        }
    Ответ написан
    Комментировать
  • Как сделать бэкап Realm БД в файл на Swift?

    ivanvorobei
    @ivanvorobei Автор вопроса
    iOS разработчик, канал https://t.me/sparrowcode
    Если URL для Realm выглядит так:

    FileManager.default
                .containerURL(forSecurityApplicationGroupIdentifier: self.identificator)!
                .appendingPathComponent("default.realm")


    То получить объект Data не сложно:

    let backup = try Data(contentsOf: realmURL)

    Дальше Data можно записать куда-то, добавить ему расширение, выгрузить... тут по вкусу.

    Чтобы заменить базу данных Ream бэкапом, используйте:

    try backup.write(to: realmURL)

    Можно сохранить бэкап в файл, добавить расширение и предлагать пользователю сохранить файл (в iCloud Drive к примеру). Чтобы восстановиться из бэкапа, нужно открыть сохраненный файл.
    Ответ написан
    Комментировать
  • Можно ли разрабатывать на Хакинтош?

    ivanvorobei
    @ivanvorobei
    iOS разработчик, канал https://t.me/sparrowcode
    Кодить можно. Настоятельно не советую связываться с хакинтошем.
    Ответ написан
  • Как получить стиль UITableView Cell с отступом в 15 и закругленными краями?

    ivanvorobei
    @ivanvorobei
    iOS разработчик, канал https://t.me/sparrowcode
    Вам нужно использовать UICollectionView.

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

    Сепаратор добавить линией в конце каждой ячейки. Или если хотите костыль - то в headerView для таблицы. То, что вы хотите сделать, в разы быстрее с помощью UICollectionView. Используйте коллекцию.
    Ответ написан
    5 комментариев
  • Как сделать чтобы ScrollView скроллился до конца?

    ivanvorobei
    @ivanvorobei
    iOS разработчик, канал https://t.me/sparrowcode
    После открытия времени работы, нужно пересчитать contentSize у UIScrollView. Код, который вы привели, просто скрывает вьюхи.
    Ответ написан
    Комментировать
  • Как быть с длинными title в nav bar на ios?

    ivanvorobei
    @ivanvorobei
    iOS разработчик, канал https://t.me/sparrowcode
    Вы не сможете изменить высоту системного navBar или перенести текст на две строки. В дизайне сможете, на практике - нет. Посмотрите гайдлайны, в случае если не помещается текст - сначала скейл, потом замена многоточием.

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

    Как костыль, можно смотреть на promt - у него меньше шрифт. Но выглядит так себе.
    Ответ написан
    Комментировать
  • Теперь в детские приложения на iOS нельзя ставить адмоб?

    ivanvorobei
    @ivanvorobei
    iOS разработчик, канал https://t.me/sparrowcode
    Да. А так же аналитики.
    Ответ написан
    4 комментария
  • Почему на iphone не отображается шрифт Cormorant-BoldItalic?

    ivanvorobei
    @ivanvorobei
    iOS разработчик, канал https://t.me/sparrowcode
    Такого шрифта нет в iOS.
    Нужно добавить шрифт в проект и инициализировать с помощью:

    UIFont(name: "CustomFont-Light", size: UIFont.labelFontSize)

    Подробнее как устанавливать кастомные шрифты на сайте Apple.
    Список доступных шрифтов из коробки можно глянуть здесь.

    UPD: Увидел что вопрос для веба. Проблема та же, решается подключением шрифта.
    Ответ написан
  • У кого есть опыт разработки iOS/macOS приложений в Xcode запущенной на VirtualBox в Windows/Linux?

    ivanvorobei
    @ivanvorobei
    iOS разработчик, канал https://t.me/sparrowcode
    Возможно. Но это мучение.

    Без рекламного бюджета запустить приложение нереально (есть исключения, конечно). Рекламный бюджет превышает стоимость б/у мака. Советую не мучать себя виртуалками и хакинтошами.
    Ответ написан
  • Приложение для андроид и ios?

    ivanvorobei
    @ivanvorobei
    iOS разработчик, канал https://t.me/sparrowcode
    Вряд ли у Яндекса открывается WebView, скорее всего у Яндекса кросс-платформенное приложение. (не юзал, возможно и нативные, но оформленные в стиле)

    Чтобы сделать "через барузер", нужно положить WebView и при старите приложения подгрузить ваш сайт. Сделать это не сложно для обеих платформ. Чтобы пройти ревью, украсьте приложение пушами, 3D actions и siri-shortcuts.
    Ответ написан
    Комментировать
  • Как правильно заполнять название для данных о возобновляемой подписке для ios приложений?

    ivanvorobei
    @ivanvorobei Автор вопроса
    iOS разработчик, канал https://t.me/sparrowcode
    5ce2bd8b40766790843464.png
    Ответ написан
    Комментировать
  • Как передать параметр в ios приложение, установленное по определенной ссылке?

    ivanvorobei
    @ivanvorobei Автор вопроса
    iOS разработчик, канал https://t.me/sparrowcode
    100% варианта нет.
    Ответ написан
    Комментировать