Ответы пользователя по тегу iOS
  • Как runloop указывает потоку спать?

    doublench21
    @doublench21 Куратор тега Swift
    У тебя неправильное понимание.

    По своей сути - поток выполняет свою задачу и умирает. Но это иногда плохо, ибо на создание тратятся ресурсы системы. Эту проблему можно решить несколькими способами... но один из них это RunLoop. RunLoop заставляет поток оставаться живым, даже если никакой задачи на нём не выполняется (Но это не основная его задача. Основная его задача "слушать"). RunLoop стал настолько полезной штукой, что его принудительно привязали к каждому созданному потоку разработчики Apple. По-умолчанию, RunLoop не активирован. То есть для обычных потоков вам даже и знать о нём не нужно. ДА вы даже не будете создавать потоки, ибо в 99% вы работаете с абстракциями DispatchQueue/OperationQueue.

    Итак, когда RunLoop активирован, то он заставляет поток жить всё время, пока активен он сам (Я напомню, что для RunLoop это не основная цель). RunLoop способен принимать какие-либо события, но это не тема этого разговора. Так вот... когда RunLoop видит, что на "поле тишина", он переходит в спящий режим.

    А спящий режим у RunLoop это просто вечный цикл. Не верите? Смотрите:
    #define	CFRUNLOOP_SLEEP() do { } while (0)
    #define	CFRUNLOOP_SLEEP_ENABLED() (0)
    Ответ написан
    8 комментариев
  • Как отцентрировать текстовое поле в Xcode?

    doublench21
    @doublench21
    Ну так а где у вас ограничение на ширину? На скриншоте я вижу только два.

    top = safeArea.top + 351
    centerX = safeArea.centerX
    width = 300
    Ответ написан
  • Какую ссылку прислать в письме на почту чтоб открыть установленное приложение в телефоне Android и iOS?

    doublench21
    @doublench21
    Смотря какие?

    ----------------------

    Есть такие ссылки: https://developer.apple.com/library/archive/docume...
    Они позволяют, переходя на сайт, скажем YouTube.com, перебрасывать сразу в приложение. Для этого типа нужно быть собственно владельцем и сайта и приложения.

    ----------------------

    Есть специфичные ссылки для приложения. У каждого ссылки свои. Вот пример того, что есть у Instagram
    • instagram://app The Instagram app
    • instagram://camera The camera (or photo library on non-camera devices)
    • instagram://media?id=MEDIA_ID Media with this ID App
    • instagram://user?username=USERNAME User with this username
    • instagram://location?id=LOCATION_ID Location feed for this location ID
    • instagram://tag?name=TAG Tag feed for this tag


    ----------------------

    А есть кнопки с переходом в Appstore: https://linkmaker.itunes.apple.com/en-us
    appstore-lrg-25178aeef6eb6b83b96f5f2d004
    Ответ написан
  • Как найти самый повторяемый символ в строке?

    doublench21
    @doublench21 Куратор тега Swift
    5daf297d86524526184825.png

    Текстом
    "adflksdlfdfddddflsdkflsdkflsdfZ"
      .lazy
      .reduce(into: [Character:Int]()) { $0[$1] = $0[$1, default: 0] + 1 }
      .sorted { $0.value < $1.value }
      .last // (key: "d", value: 10)


    З.Ы. Работает крайне быстро.
    Ответ написан
    Комментировать
  • На чем лучше делать приложение для андроид-ios, по типу spotify?

    doublench21
    @doublench21
    Обязательно должен быть премиум дизайн
    - давно я так не ржал...

    Неужели сильно сложно в голове прокрутить пару мыслей:
    • Какие языки я знаю? Swift или Java. А может таки JS
    • Если я ничего из этого не знаю, то наверное в кратчайшие сроки мне такое не осилить? Тем более у меня КРОВЬ ИЗ НОСУ должен быть премиум дизайн
    • Но я хотя бы знаю JS? Знаю и я где-то слышал, что можно писать под обе платформы сразу.
    • А может мне погуглить? Нашел, это React native. Но ещё кажется есть прогрессирующий Flutter.
    Ответ написан
  • Какие книги лучше выбрать для iOS-разработки?

    doublench21
    @doublench21 Куратор тега Swift
    Одно и тоже каждый месяц.

    - Знаешь swift?
    - Нет
    https://books.apple.com/us/book/the-swift-programm...

    - Знаешь английский?
    - Да
    https://www.youtube.com/playlist?list=PLPA-ayBrweU...

    - Не можешь понять что-то из курса выше?
    - Да
    https://www.raywenderlich.com/
    Ответ написан
    Комментировать
  • Как грамотно реализовать задачу(описание ниже)?

    doublench21
    @doublench21 Куратор тега Swift
    Странный у вас выбор тегов и способ решения.

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

    Балансировка видео потоков это вообще тема для отдельного разговора. Вам лучше не изобретать велосипед, а использовать готовые балансировщикии нагрузки.
    Ответ написан
    Комментировать
  • Как улучшить надежность сканнера BLE в бекграунде в iOS?

    doublench21
    @doublench21 Куратор тега Swift
    Каждый раз одно и тоже. Запомните уже наконец:

    - Cостояние, когда ваше приложение находится в выключенном состоянии, вы не можете делать абсолютно НИЧЕГО.

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

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

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

    doublench21
    @doublench21 Куратор тега Swift
    Нельзя! Это и есть суть строго типизированных языков.
    type(of: ) это вывод типа динамически, но компилятору глубоко и с колокольни до этого. Он видит только тип, который Вы указали изначально. Это и правильно! Нет никаких если, если вам нужна некая функциональность у потомков в рамках родителя, то создавайте протокол и описывайте их. Это основы ООП
    Ответ написан
    6 комментариев
  • Запустить мое приложение программно в IOS, swift?

    doublench21
    @doublench21 Куратор тега Swift
    Будильник ты никогда не создашь! В iOS неактивное приложение, остаётся неактивным. Аналог системного будильника не сделать.

    А чтобы не страдать херней и сделать что-то подобное, можно и нужно использовать Shortcuts.
    Ответ написан
    Комментировать
  • Как реализовать фоновую задачу когда приложение выключено?

    doublench21
    @doublench21 Куратор тега Swift
    НЕЛЬЗЯ! И вполне правильно, если я закрыл приложение, я должен быть уверен, что оно не будет работать от слова совсем, иначе это уже какое-то Ведро выходит.

    BackgroundFetching - это только про свёрнутое приложение.
    Ответ написан
    6 комментариев
  • Swift iOS Как измерить скорость соединения?

    doublench21
    @doublench21 Куратор тега Swift
    Если делать надёжно, можно взять всем известный ipef3, исходники на Си благополучно находятся здесь https://github.com/esnet/iperf
    Пишите простую обёртку на Swift с нужными Вам типами измерений над этой библиотекой. (Это делается очень легко, информации куча)
    Ну собственно теперь подключается свою обёртку на Swift(import MySwiftIperf) и начинаете измерять.

    Если делать проще, то можно качать обычным URLSession некий большой файл. У URLSession есть отличный делегат, в котором можно глянуть текущую порцию скаченных данных. Этого достаточно для измерения скорости. Начальное время, текущее время, текущее кол-во скаченных байт, всё это делим на нужное измерение в кб/мб/...

    P.S. Красивая стрелка это тема для отдельного разговора.
    Ответ написан
    1 комментарий
  • Какой мобильный кроссплатформенный фреймворк посоветуете?

    doublench21
    @doublench21
    Хоть разработчики кроссплатформенного г*%на и будут гореть в аду(кроме разработчиков VSCode), но лучшим вариантом на данный момент является React Native. Для справки, нынешний Инстаграмм сделан на React Native. Ближайшим пресоедователем, набирающим обороты является Flutter .

    5VuVjGP.png

    P.S. Всё остальное забудьте как страшный сон!
    Ответ написан
    6 комментариев
  • Возможно ли на iOS узнать, какой процесс сколько оперативной памяти занимает?

    doublench21
    @doublench21
    1. iOS process list: github в Гугл. Что-то может и сработает, но вряд ли на iOS11/12/13.
    2. Можете написать в твиттер ему. Один из лучших iOS исследователей. Он уже такое пытался
    Ответ написан
    Комментировать
  • Минимальный набор знаний для разработчика iOS?

    doublench21
    @doublench21
    Вы приводите в пример сервисы на основе Spring, только я не пойму, причём тут iOS?

    Напишу оба варианта.

    Back-end:
    1) Знать Swift(очевидно)
    2) Знать Vapor
    3) Знать Swift Package Manager
    4) Знать NIO
    5) Знать Foundation
    6) Знать Dispatch

    Front-end iOS Client:
    1) Знать Swift(очевидно)
    2) Знать UIKit
    3) Знать Foundation
    4) Знать Dispatch
    5) Знать Core Data
    6) Знать CocoaPODS(хотя любые менеджеры зависимостей считаю по большей части бесполезными в разработке клиента, ибо 80% работы - это работа интерфейса, где конкретных и нужных тебе решений крайне мало. Легче написать самому, а может и не легче, но лучше бы...)

    * Сортировка в порядке важности.
    Ответ написан
    3 комментария
  • Невозможно зайти на сайт с IPhone, в чем может быть проблема?

    doublench21
    @doublench21
    У вас проблемы с настройкой сервера для http2.

    https://serverfault.com/questions/937253/https-doe...

    Гуглите:
    http2 error: Invalid HTTP header field was received: frame type: 1, stream: 1, name: [upgrade], value: [h2]


    Это видимо связано со специфичной OpenSSL на платформе iOS/macOS. Хром же на macOS видимо использует внутреннюю версию и открывает без проблем.

    Выхлоп:

    curl https://ladnydom.ru/ --verbose
    *   Trying 92.53.100.223...
    * TCP_NODELAY set
    * Connected to ladnydom.ru (92.53.100.223) port 443 (#0)
    * ALPN, offering h2
    * ALPN, offering http/1.1
    * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
    * successfully set certificate verify locations:
    *   CAfile: /etc/ssl/cert.pem
      CApath: none
    * TLSv1.2 (OUT), TLS handshake, Client hello (1):
    * TLSv1.2 (IN), TLS handshake, Server hello (2):
    * TLSv1.2 (IN), TLS handshake, Certificate (11):
    * TLSv1.2 (IN), TLS handshake, Server key exchange (12):
    * TLSv1.2 (IN), TLS handshake, Server finished (14):
    * TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
    * TLSv1.2 (OUT), TLS change cipher, Client hello (1):
    * TLSv1.2 (OUT), TLS handshake, Finished (20):
    * TLSv1.2 (IN), TLS change cipher, Client hello (1):
    * TLSv1.2 (IN), TLS handshake, Finished (20):
    * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
    * ALPN, server accepted to use h2
    * Server certificate:
    *  subject: CN=www.ladnydom.ru
    *  start date: Sep 18 00:00:00 2018 GMT
    *  expire date: Oct 18 12:00:00 2019 GMT
    *  subjectAltName: host "ladnydom.ru" matched cert's "ladnydom.ru"
    *  issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=Thawte RSA CA 2018
    *  SSL certificate verify ok.
    * Using HTTP2, server supports multi-use
    * Connection state changed (HTTP/2 confirmed)
    * Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
    * Using Stream ID: 1 (easy handle 0x7fe049800400)
    > GET / HTTP/2
    > Host: ladnydom.ru
    > User-Agent: curl/7.54.0
    > Accept: */*
    > 
    * Connection state changed (MAX_CONCURRENT_STREAMS updated)!
    * http2 error: Invalid HTTP header field was received: frame type: 1, stream: 1, name: [upgrade], value: [h2]
    * HTTP/2 stream 1 was not closed cleanly: PROTOCOL_ERROR (err 1)
    * Closing connection 0
    * TLSv1.2 (OUT), TLS alert, Client hello (1):
    curl: (92) HTTP/2 stream 1 was not closed cleanly: PROTOCOL_ERROR (err 1)
    Ответ написан
    6 комментариев
  • Интерактивная 3D модель в IOS App?

    doublench21
    @doublench21
    Смотря что вы используете для отображения 3D модели. Если Scenekit, то конечно - да.
    Ответ написан
  • Почему view controller неактивен после перехода на него с другого view controller через navigation controller, используя custom animation transition?

    doublench21
    @doublench21 Куратор тега Swift
    Быть может в completion вашей анимации надо все же сказать системе, что анимация завершена.

    transitionContext.completeTransition(true)
    Ответ написан
    1 комментарий
  • Как сделать кастомизированную панель навигации в приложении для iOS?

    doublench21
    @doublench21 Куратор тега Swift
    Возможно всё!

    В гугле куче статей на эту тему. Сделайте свои подклассы UITabBarController/UITabBar/UITabBarItem. Переопределите нужные методы, добавьте нужные сабвью.

    А что касается переходов, это достаточно большая тема, но опять таки, она хорошо расписана. У делегата UITabBarControllerDelegate, есть два метода отвечающие за переход:
    https://developer.apple.com/documentation/uikit/ui...
    https://developer.apple.com/documentation/uikit/ui...

    Каждый из этих методов должен вернуть соответсвующий аниматор. Как создавать такие? Куча статей.
    Ответ написан
    Комментировать
  • Изучение iOS-разработки и дизайна мобильных приложений. Как быть?

    doublench21
    @doublench21 Куратор тега Swift
    Привет из Ташкента. Дизайн мобильных приложений или таки разработка мобильных приложений? Разные ипостаси.

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

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

    Если ответ на первый вопрос утвердительный и макбук таки будет, то смело скачивай книжку по Swift от Apple. Устанавливай Swift на Linux и начинай приключение в мир нового для тебя языка.
    Ответ написан