• TestFlight не все отображается по функционалу?

    briahas
    @briahas
    ObjC, Swift, Python
    Запустите у себя локально свое приложение в Релиз сборке и посмотрите что получается у вас. Отображается ли алерт, лейблы итд?
    Ответ написан
    5 комментариев
  • Как организовать международный прием платежей с минимумом налогов?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    у эквайрингов в РФ есть один недостаток: они не любят карты дальше РФ/СНГ
    за Альфу не скажу, может, любит, но, думаю, не любит

    второе - не знаю, какие планируются обрроты, но прямой мерчант дают далеко не нулевым, хз насколько верна цифра в $100к/mo для минимума (для Кипра до кризиса было и 10к), но, думаю, около того

    PayPal с нуля, если пролет с мерчантом, приемлем. Лучше не в России.

    Эстонские компании с 25% налогом и возможным НДС - для лохов. Если вы клюнули на e-residency, поздравляю.
    NL, CY получше, но НДС везде в Европе давит тяжелой лапой.

    "Всего мира" не существует. От слова "совсем" или "вообще"
    Есть США с кредитками в пупке, от рождения. И все. Чуток AU и CA.
    Остальные платят кредитками много хуже, европа - много населения, потому много транзакций, но до США конверсии далеко.
    Поэтому на "все виды платежей" можно забить. Их всего три: кредитки, Пейпал и крипто. Крипто для нелегала (казиношки там, зверушки, ..)

    Ирландия и Нидерлады да. Ведут. 50к в год если готовы выложить, можно что-то рекомендовать.

    Sripe хорош, но проблема США в их завязанности на US Citizen, это значит - наличие SSN.
    Да, можно зарегить компанию, необязательно Делавер (там скрытый реест,в отличие от многих, но это последнее преимущество). И США не оффшор, номиниала с SSN нанять за 500 в год не получится.

    В целом схема строится от оборотов, если продавтаь услуги аутсорса для небольшой конторы - это одно, 8-15% потерь + налоги, если обороты большие - это другое (3-5% финсервисам + налоги), очевидно, что универсального решения быть не может
    Ответ написан
  • Существует ли фреймворк для соединения с Bitrix под Swift?

    iamd503
    @iamd503
    Верстальщик
    Да, называется API
    Ответ написан
    Комментировать
  • Стоит ли учить swift?

    DevMan
    @DevMan
    пхп хоронят с момента его появления, а он все ещё живее всех других в своей области.

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

    Zoominger
    @Zoominger
    System Integrator
    Приветствую. Собственно говоря, ниже попытаюсь сформулировать предпосылки возникновения вопроса из заголовка:

    Как бы было здорово, если бы вы действительно сформулировали бы их, а не размазывали бы на два экрана.

    Отвечаю на вопрос: да, перспективы есть, мобильные устройства захватывают рынок и это будет продолжаться. Вперёд!
    Ответ написан
    Комментировать
  • Как спарить сложные данные JSON?

    doublench21
    @doublench21 Куратор тега Swift
    У вас JSON кривой по ссылке. В этой строчке
    {"id":67,"iconImage":"image\/catalog\/style\/modile\/icons-03.png"
    id имеет целочисленный тип, хотя во всех остальных местах это строка.
    5dd182bfe2d36713711596.jpeg

    Если не учитывать этот косяк в JSON, то такое можно спарсить как-то так:
    5dd181e2cd959773181456.png

    Код
    struct EntryList: Decodable {
      struct DynamicCodingKey: CodingKey {
        var stringValue: String
        init?(stringValue: String) { self.stringValue = stringValue }
        var intValue: Int? { nil }
        init?(intValue: Int) { nil }
      }
    
      struct Entry: Decodable {
        struct Content: Decodable {
          struct Subcategory: Decodable {
            let id: String
            let iconImage: String
            let name: String
            let sortOrder: String
            let type: String
          }
          
          let iconImage: String
          let iconImageActive: String
          let image: String
          let name: String
          let sortOrder: String
          let subcategories: [Subcategory]
        }
        
        let name: String
        let content: Content
      }
     
      let entries: [Entry]
      
      init(from decoder: Decoder) throws {
        let entriesContainer = try decoder.container(keyedBy: DynamicCodingKey.self)
        
        entries = try entriesContainer.allKeys.map { key in
          print(key)
          let content = try entriesContainer.decode(Entry.Content.self, forKey: key)
          return Entry(name: key.stringValue, content: content)
        }
      }
    }
    
    var entryList: EntryList?
    
    let task = URLSession
      .shared
      .dataTask(with: URL(string: "https://blackstarshop.ru/index.php?route=api/v1/categories")!) { (data, _, error) in
        guard error == nil else { return }
        guard let data = data else { return }
        
        entryList = try! JSONDecoder().decode(EntryList.self, from: data)
      }
    
    task.resume()
    Ответ написан
    2 комментария
  • React native или swift что выбрать веб-разработчику для перехода на ios?

    RomReed
    @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    Думаю все зависит от направления и требования. Если вы собираетесь писать например банковское ПО, то вам точно в swift. если же нужна быстрота разработки под несколько платформ то вам в react native. Влиться в react-native после react js намного проще чем в swift. Ну как ни крути производительность в swift будет выше чем на react native, но это не означает что вы будете ждать отрисовку часами. Это значит что будут подтормаживания. Многие заказчики готовы жертвовать небольшой производительностью ради продукта на двух системах так что без работы не останетесь.
    Ответ написан
    Комментировать
  • Swift iOS Как измерить скорость соединения?

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

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

    P.S. Красивая стрелка это тема для отдельного разговора.
    Ответ написан
    1 комментарий
  • Как исправить ошибку Declaration ‘pressesEnded(presses:withEvent:)’ has different argument labels from any potential overrides?

    doublench21
    @doublench21 Куратор тега Swift
    Ну Вам ведь даже сам Xcode пишет:
    Слушай, я вижу что такой метод есть, но почему-то у тебя отличаются названия агрументов. Может глянешь?


    Для Вас даже в Xcode есть встроенная документация - ⌘ + Shift + 0. Если ввести название этого метода и глянуть на аргументы, то становится ясно, что presses нужно заменить _ presses, а withEvent нужно заменить на with Тоже самое сделать и со вторым методом.

    func pressesBegan(_ presses: Set<UIPress>, with event: UIPressesEvent?)


    P.S. Если Вы позиционируете себя iOS разработчиком, то как вы дальше та будете, если такая простая ошибка вызывает диссонанс.
    Ответ написан
    1 комментарий
  • Swift/Java vs React Native. В чем разница и куда лучше смотреть?

    RomReed
    @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    Добрый день. У меня есть опыт разработки на реакт натив 2 года. Его самый большой плюс это скорость разработки(вам не нужно искать 2 разрабов для android и ios). Вы пишите код сразу на две платформы таких образом выкатываете приложение на рынок в очень короткие сроки. Но у него есть и минусы - его производительность будет уступать нативному приложению написанному на Swift/Java. В практике было пару раз что заказчик быстро выкатывает приложение на рынок. Потом его не устраивает производительность и приложение переписывается под Swift/Java.
    Ответ написан
    1 комментарий
  • Почему view controller неактивен после перехода на него с другого view controller через navigation controller, используя custom animation transition?

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

    transitionContext.completeTransition(true)
    Ответ написан
    1 комментарий
  • С Чем легче работать на Java и Swift, с HTTP Request или с базой данных напрямую?

    iLLuzor
    @iLLuzor
    Java, Kotlin, Android Developer
    Никто не работает с серверной базой данных напрямую.
    Если сделаете удобный API, сложно не будет.
    Ответ написан
    Комментировать
  • Какова востребованность iOS специалиста с возрастом?

    y0u
    @y0u
    dev
    Не думаю, что программист, который посвятил уйму времени на изучение одной сферы деятельности, не сможет в случае чего изучить новые технологии. Если такое произойдет, то дело в человеке, а не в том, что он потратил время "не на то, что нужно".
    Ответ написан
    Комментировать
  • Какова востребованность iOS специалиста с возрастом?

    DevMan
    @DevMan
    котируются скилы и мозги. эти качества, как правило, с возрастом только растут.
    если только ты не распоследний слоупок.
    и это касается любой сферы в айти, не только яось-дева.

    мне больше сорокета. и обездоленным я себя совсем не ощущаю. наоборот - приходится постоянно отбиваться от оферов.
    Ответ написан
    Комментировать
  • Как решить лимит с запланированными оповещениями?

    doublench21
    @doublench21 Куратор тега Swift
    А кто Вам мешает поставить задачу в бэкграунд и запрашивать даты каждый день в 00:00 скажем и добавлять оповещение? Или скажем запрашивать новые даты с более длительным периодом. Никто же Вас не заставляет в один день устанавливать 200 оповещений. Получайте новые даты и устанавливайте их по мере необходимости. В приложение для этого заходить не нужно.

    Второй вариант использовать EventKit(Календарь, Напоминания). Там вообще лимитов нет.
    Ответ написан
    2 комментария
  • Как в swift преобразовать кодироку строки?

    doublench21
    @doublench21 Куратор тега Swift
    let str = "Привет Как дела"  // Внутренняя кодировка Свифта utf-32
    
    let cp1251Data = str.data(using: .windowsCP1251) 
    let utf8Data = str.data(using: .utf8)
    
    cp1251Data.count // 15
    utf8Data.count // 28
    
    // ***********************************
    
    let session = URLSession.shared
    var URL = URL(string: "https://greatcomments.server/add")!
    var request = URLRequest(url: URL)
    request.httpMethod = "POST"
        
     // Headers
    request.addValue("application/x-www-form-urlencoded; charset=windows-1251", forHTTPHeaderField: "Content-Type")
    
    // Form URL-Encoded Body 
    let bodyParameters = [
         "comment": "Проверка",
    ]
    let bodyString = bodyParameters.queryParameters
    request.httpBody = bodyString.data(using: . win1251, allowLossyConversion: true)
    
    let task = session.dataTask(with: request, completionHandler: { (data: Data?, response: URLResponse?, error: Error?) -> Void in
          if (error == nil) {
            // Success
            let statusCode = (response as! HTTPURLResponse).statusCode
            print("URL Session Task Succeeded: HTTP \(statusCode)")
          }
          else {
            // Failure
            print("URL Session Task Failed: %@", error!.localizedDescription);
          }
        })
    task.resume()
    session.finishTasksAndInvalidate()
    
    
    // ***********************************
    
    protocol URLQueryParameterStringConvertible {
      var queryParameters: String {get}
    }
    
    extension Dictionary : URLQueryParameterStringConvertible {
      var queryParameters: String {
        var parts: [String] = []
        for (key, value) in self {
          let part = String(format: "%@=%@",
                            String(describing: key).win1251Encoded,
                            String(describing: value).win1251Encoded)
          parts.append(part as String)
        }
        return parts.joined(separator: "&")
      }
      
    }
    
    extension URL {
      func appendingQueryParameters(_ parametersDictionary : [String: String]) -> URL {
        let URLString : String = String(format: "%@?%@", self.absoluteString, parametersDictionary.queryParameters)
        return URL(string: URLString)!
      }
    }
    
    // Раньше Swift(Foundation) позволял любую строку закодировать в url-encode в любой кодировке. 
    // Сейчас же де факто это можно лишь сделать в utf-8. 
    // Видимо Apple аргументирует это тем,  что utf-8 - это стандарт в вебе. 
    
    // Да всех остальных случаев нужно писать такую функцию самому. 
    // Ниже кодировка в url-encode в windows-1251
    
    extension CharacterSet {
      static let rfc3986Unreserved = CharacterSet(charactersIn: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~=&+")
    }
    
    extension String.Encoding {
      static let win1251 = String.Encoding(rawValue: CFStringConvertEncodingToNSStringEncoding(CFStringEncoding(CFStringEncodings.windowsCyrillic.rawValue)))
    }
    
    extension String {
      func addingPercentEncoding(withAllowedCharacters characterSet: CharacterSet, using encoding: String.Encoding) -> String {
        let stringData = self.data(using: encoding, allowLossyConversion: true) ?? Data()
        let percentEscaped = stringData.map {byte->String in
          if characterSet.contains(UnicodeScalar(byte)) {
            return String(UnicodeScalar(byte))
          } else if byte == UInt8(ascii: " ") {
            return "+"
          } else {
            return String(format: "%%%02X", byte)
          }
          }.joined()
        return percentEscaped
      }
      
      var win1251Encoded: String {
        return self.addingPercentEncoding(withAllowedCharacters: .rfc3986Unreserved,  using: . win1251)
      }
    }
    Ответ написан
  • Что такое CFRunLoop в iOS в библиотеке CoreFoundation?

    doublench21
    @doublench21 Куратор тега Swift
    Серьезно?
    https://developer.apple.com/documentation/corefoun...
    https://developer.apple.com/library/archive/docume...

    Если просто, это то, что отличает обычное приложение от приложения командной строки. CFRunLoop - это очередь, которая бегает по всему, что внутри неё в бесконечном цикле, до тех пор, пока какой-то из её компонентов в очереди не подаст сигнал. После обработки повторяет эти действия вплоть до закрытия приложения.
    A run loop is an event processing loop that you use to schedule work and coordinate the receipt of incoming events. The purpose of a run loop is to keep your thread busy when there is work to do and put your thread to sleep when there is none.
    Ответ написан
    Комментировать
  • Как сделать так, чтобы Navigation Bar не исчезал при segue?

    doublench21
    @doublench21 Куратор тега Swift
    Вот в контроллере следующей страницы напишите это:
    override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
    
            navigationController?.setNavigationBarHidden(false, animated: false)
    }
    Ответ написан
    Комментировать
  • Как выполнять функцию пока нажата клавиша в Swift?

    @iMaximus
    Элементарно делается, создается 2 IBAction один начинается при нажатии на кнопку, запускается какай то процесс. Второй при отжатии, процесс прекращается.
    Ответ написан
    4 комментария