Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Нестандартная задача под iOS

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

Задача:

Есть несколько айпадов. На одном из них есть игра. 
Мне надо перенести игру на другой айпад, что бы сохранились все настройки + должен быть перенесен идентификатор IDFA. 

Это кратко. Подробнее в скайп - oklimik


Ответ:
Не находит тебя
Вопрос: Что должен знать Senior

Всем привет!

Название темы и суть вопроса, возможно, покажутся дурацкими, но тем не менее.
Задался недавно вопросом, что мне следует подтянуть, чтобы приблизиться к некоему абстрактному уровню Senior iOS developer.
Проанализировав свои знания и пробелы, выяснил, какие вещи, по своему мнению, я бы выделил как наиболее приоритетные.
Хотел бы спросить совета, насколько, на ваш взгляд, важны таки темы?

1) Освоение чистого SQLite.
Всегда работал только с CoreData и др. фреймворками.

2) Алгоритмы, алгоритмы, алгоритмы.
Кроме сортировки пузырьком - ничего сейчас из головы не напишу. Периодически решаю задачки с HackerRank, но сам вижу, что серьезные задачи с этого ресурса я пока не потяну.

3) Objective-C, Swift low level.
На стандартные вопросы об основах ObjC рантайма, работе ARC, структуре NSObject, особенностях Swift'а я ответить могу. Но как это все дело работает под капотом на низком уровне - с большим затруднением.
Есть мысль углубиться в исходники Objective-C, Swift и посвятить время их разбору.

4) UIDynamicAnimator.
Кроме пары домашних экспериментов, ни разу не работал. Из пары серий WWDC понял, что там непаханое поле для изучения, которое потянет за собой многое.

5) Сложные UICollectionViewLayout.
Кроме flow layout, всего один раз писал относительно несложный лайаут наследуясь от абстрактного класса UICollectionViewLayout.
Но встречаю много репозиториев на Github, где люди пишут просто космические лайауты, где глядя в код я понимаю, что до таких вещей еще я дорос, увы.

Буду рад комментариям!
Ответ: Лично я считаю, что специалист с рангом senior должен быть в первую очередь инженером высокого качества, а не iOS разработчиком.
Конечно, это реально большой багаж и съеденных собак, что влечет за собой умение хладнокровно смотреть на вещи и делать правильный выбор. Как по мне, большинство навыков часто не привязаны к оси. На моей практике встречается примерно 40% задач связанных с iOS. В основном же это умение правильно спроектировать архитектуру, правильно расставить приоритеты и сроки выполнения, наладить коммуникацию с заказчиком, умение вести проект, поставлять работающий продукт и так далее. Т.е. это человек, который сам может и знает как тащить всю телегу, пусть даже это и не нужно будет делать каждый день.

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

Многие говорят, что алгоритмы не нужны, но это не так, они нужны но крайне редко (разве что вы работаете над какими-то специфическими задачами, где они нужны 24\7) и если вы ориентируетесь в них, то это ооочень спасает.
Обычно вы следуете такому порядку разработки: make it work, make it right, make it fast. И вот до последнего этапа вы почти никогда не доходите, т.к. большинство задач не требуют оптимизации. Но когда она нужна, вы начинаете рвать на себе волосы, потому что мало того, что вы не знаете подходящих решений, так вы даже не знаете как их правильно искать (гуглить) и даже если найдете что-то далеко похожее - как это правильно реализовать.
Вопрос: Что должен знать Senior

Всем привет!

Название темы и суть вопроса, возможно, покажутся дурацкими, но тем не менее.
Задался недавно вопросом, что мне следует подтянуть, чтобы приблизиться к некоему абстрактному уровню Senior iOS developer.
Проанализировав свои знания и пробелы, выяснил, какие вещи, по своему мнению, я бы выделил как наиболее приоритетные.
Хотел бы спросить совета, насколько, на ваш взгляд, важны таки темы?

1) Освоение чистого SQLite.
Всегда работал только с CoreData и др. фреймворками.

2) Алгоритмы, алгоритмы, алгоритмы.
Кроме сортировки пузырьком - ничего сейчас из головы не напишу. Периодически решаю задачки с HackerRank, но сам вижу, что серьезные задачи с этого ресурса я пока не потяну.

3) Objective-C, Swift low level.
На стандартные вопросы об основах ObjC рантайма, работе ARC, структуре NSObject, особенностях Swift'а я ответить могу. Но как это все дело работает под капотом на низком уровне - с большим затруднением.
Есть мысль углубиться в исходники Objective-C, Swift и посвятить время их разбору.

4) UIDynamicAnimator.
Кроме пары домашних экспериментов, ни разу не работал. Из пары серий WWDC понял, что там непаханое поле для изучения, которое потянет за собой многое.

5) Сложные UICollectionViewLayout.
Кроме flow layout, всего один раз писал относительно несложный лайаут наследуясь от абстрактного класса UICollectionViewLayout.
Но встречаю много репозиториев на Github, где люди пишут просто космические лайауты, где глядя в код я понимаю, что до таких вещей еще я дорос, увы.

Буду рад комментариям!
Ответ: Лично я считаю, что специалист с рангом senior должен быть в первую очередь инженером высокого качества, а не iOS разработчиком.
Конечно, это реально большой багаж и съеденных собак, что влечет за собой умение хладнокровно смотреть на вещи и делать правильный выбор. Как по мне, большинство навыков часто не привязаны к оси. На моей практике встречается примерно 40% задач связанных с iOS. В основном же это умение правильно спроектировать архитектуру, правильно расставить приоритеты и сроки выполнения, наладить коммуникацию с заказчиком, умение вести проект, поставлять работающий продукт и так далее. Т.е. это человек, который сам может и знает как тащить всю телегу, пусть даже это и не нужно будет делать каждый день.

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

Многие говорят, что алгоритмы не нужны, но это не так, они нужны но крайне редко (разве что вы работаете над какими-то специфическими задачами, где они нужны 24\7) и если вы ориентируетесь в них, то это ооочень спасает.
Обычно вы следуете такому порядку разработки: make it work, make it right, make it fast. И вот до последнего этапа вы почти никогда не доходите, т.к. большинство задач не требуют оптимизации. Но когда она нужна, вы начинаете рвать на себе волосы, потому что мало того, что вы не знаете подходящих решений, так вы даже не знаете как их правильно искать (гуглить) и даже если найдете что-то далеко похожее - как это правильно реализовать.
Вопрос: Интеграция Healtkit в React native приложение

Кому интересно - пишите, пожалуйста, нужна или консультация или выполнение задачи. Естественно за оплату.
Обращайтесь на почту andrey.f@singree.com, будем рады помощи

Техническая часть
Тип данных обмена с сервером: JSON
Данные о кол-во шагов: Apple Healthkit 
Поддержка устройств: iPhone 4S, iPhone 5, iPhone 5C, iPhone 5S, iPhone 6 and iPhone 6 Plus, iPhone 6s and iPhone 6s Plus, iPod Touch (5th generation), iPod Touch (6th generation)
Операционная система: IOS 8 и выше
Использовать React Native версии 0.13.0 и выше

Задачи:

1) Интегрировать IOS healthkit в react-native приложение для получения количества шагов пройденных за день или любой другой промежуток времени. Интеграцию native-module произвести по примеру документации react-native 
2) Интегрировать уведомление, которое будет в определенное время показано пользователю. Уведомление может быть, как local и remote и не должно зависеть от наличия интернета на устройстве. (https://facebook.github.io/react-nat...s.html#content)
3) Организовать передачу накопленной статистики из устройства на сервер ежедневно или с задержкой, если на момент отправки нету интернета на устройстве.
Ответ:
Кому интересно - пишите, пожалуйста, нужна или консультация или выполнение задачи. Естественно за оплату.
Обращайтесь на почту andrey.f@singree.com, будем рады помощи

Техническая часть
Тип данных обмена с сервером: JSON
Данные о кол-во шагов: Apple Healthkit 
Поддержка устройств: iPhone 4S, iPhone 5, iPhone 5C, iPhone 5S, iPhone 6 and iPhone 6 Plus, iPhone 6s and iPhone 6s Plus, iPod Touch (5th generation), iPod Touch (6th generation)
Операционная система: IOS 8 и выше
Использовать React Native версии 0.13.0 и выше

Задачи:

1) Интегрировать IOS healthkit в react-native приложение для получения количества шагов пройденных за день или любой другой промежуток времени. Интеграцию native-module произвести по примеру документации react-native 
2) Интегрировать уведомление, которое будет в определенное время показано пользователю. Уведомление может быть, как local и remote и не должно зависеть от наличия интернета на устройстве. (https://facebook.github.io/react-nat...s.html#content)
3) Организовать передачу накопленной статистики из устройства на сервер ежедневно или с задержкой, если на момент отправки нету интернета на устройстве.
Вопрос: Скопировать из видео библиотеки файл в папку докум

Задача: скопировать из видео библиотеки файл в папку документ программы.
Все бы хорошо но xcode после выбора зачем то "Сжатие видео..."
Как это дело отменить?
Код

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    
    // Displays movie capture control
    picker.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie, nil];
    
    picker.allowsEditing = NO;
    picker.delegate = self;


Добавлено через 2 минуты и 48 секунд
Нашел на форумах
Код

picker.videoQuality = UIImagePickerControllerQualityTypeHigh;


не помогло:(
Ответ:
Задача: скопировать из видео библиотеки файл в папку документ программы.
Все бы хорошо но xcode после выбора зачем то "Сжатие видео..."
Как это дело отменить?
Код

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    
    // Displays movie capture control
    picker.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie, nil];
    
    picker.allowsEditing = NO;
    picker.delegate = self;


Добавлено через 2 минуты и 48 секунд
Нашел на форумах
Код

picker.videoQuality = UIImagePickerControllerQualityTypeHigh;


не помогло:(
Вопрос: Прогрузка и ленивая загрузка UIView перед доба...

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

Класс этой вью
Код

- (id)initWithSpinset:(NSString*)spinset withSize:(CGSize)size {
    self = [super initWithFrame:(CGRect){0, 0, size}];
    if (!self) return nil;
    
    self.clipsToBounds = YES;
    
    [NSThread detachNewThreadSelector:@selector(loadImage:) toTarget:self withObject:spinset];
    
    return self;
}

- (void)loadImage:(NSString*)spinset {
    NSString *filePath = [[NSBundle mainBundle] pathForResource:spinset ofType:nil];
    NSData *imageData = [[NSData alloc] initWithContentsOfFile:filePath];
    UIImage *spinsetImage = [[UIImage alloc] initWithData:imageData];
    if (!spinsetImage) return;
    
    _spinsetImageView = [[UIImageView alloc] initWithImage:spinsetImage];
    if (_spinsetImageViewPosition)
        _spinsetImageView.frame = CGRectOffset(_spinsetImageView.frame, 0, _spinsetImageViewPosition);
    [self addSubview:_spinsetImageView];
    
    self.isReady = YES;
}


Потом, в другом месте, создаю экземпляр вышеприведенного класса и по KVO слежу за свойством isReady. По isReady == YES добавляю вью на главную вью и там еще всякого делаю.

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

Это сообщение отредактировал(а) Shklyar - 28.2.2014, 13:30
Ответ:
ну создание UI не может занимать много времени, может много времени занимает что-то другое? Например загрузка картинок или наполнение массивов
Вопрос: Ищу начинающего iOS разработчика

Привет!

Мы - активно развивающийся стартап, сейчас наша месячная аудитория 20 000 пользователей с мобильных телефонов.

Нам в команду требуется начинающий iOS разработчик для поддержки/развития существующего приложения.
Для начала это будут простые задачи вроде исправлений в интерфейсе, дальше - больше.
Платить будем сразу по факту выполнения задачи.

Нужно:
1. как минимум умение создать приложение "Hello World";
2. иметь базовые навыки программирования;
3. иметь девайсы для разработки.
4. знание основ git

Пишите мне телеграм , скайп: ivan_medvedev_91

Спасибо.
Ответ: Мне не интересно Ваше предложение ... xzkakoimail@gmail.com
Вопрос: Ищу начинающего iOS разработчика

Привет!

Мы - активно развивающийся стартап, сейчас наша месячная аудитория 20 000 пользователей с мобильных телефонов.

Нам в команду требуется начинающий iOS разработчик для поддержки/развития существующего приложения.
Для начала это будут простые задачи вроде исправлений в интерфейсе, дальше - больше.
Платить будем сразу по факту выполнения задачи.

Нужно:
1. как минимум умение создать приложение "Hello World";
2. иметь базовые навыки программирования;
3. иметь девайсы для разработки.
4. знание основ git

Пишите мне телеграм , скайп: ivan_medvedev_91

Спасибо.
Ответ: Мне не интересно Ваше предложение ... xzkakoimail@gmail.com
Вопрос: Перестала отображаться часть PNG файлов

Всем привет!

Столкнулся с какой-то дикой проблемой:
Была задача добавить в старый, чужой проект поддержку 64-х битной архитектуры и заменить кастомные статические библиотеки на новые, в которых эта самая 64-х битная архитектура поддерживается.
После многочисленных манипуляций все стало ОК, проект собрался, запустился, но внезапно перестала отображаться часть png ресурсов. Хотя во всех XIB'ах они отображаются корректно.
Причем, в симуляторе все ОК. На девайсе - непонятно что.

Увидеть разницу между теми картинками, которые отображаются, и которые нет, так и не смог - все подключены к проекту одинаково.

Причем, попытался удалить из проекта одну из картинок, переименовал ее, добавил заново, подставил вместо старой в Xibe'е - она так и не появилась.

Уже схожу с ума)) Clean проекта делал кучу раз, пересобирал..

Может у кого-то будет советы, что можно было бы попробовать?

Добавлено через 12 минут
Увидел отличие - все картинки, которые отображаются, имеют заголовки, определяющие принадлежность к Ретине - button@2x.png

А те что не отображаются - такого префикса не имеют.

Тем не менее, пытался менять их имя с добавлением префикса - никаких изменений.
Но хотя бы заметил систематичность какую-то.
Ответ: Спасибо, Vorona, за рекомендации!

Да, все пункты я проверял кроме "контента *.app файла" - не в курсе как это можно посмотреть.. Может вы сможете подсказать?

Откатился на рабочий коммит, начал пошагово выполнять все свои действия, и смотреть, после чего происходит весь этот кошмар.
Выяснилось, что как только я меняю в настройках проекта Architectures на "Standard architectures (armv7, arm64)", тут же на следующем запуске пропадают картинки.
Вне зависимости от того, что я делал до этого.

Вот этот момент удивляет больше всего((
Вопрос: Пляски вокруг UILabel (как нормально настроить перенос текста?)

Всем привет, существует задача - один вью контроллер с одной UILabel на нем. Текст этого лейбла динамически изменяется, должно быть всегда на весь экран девайса крупно его видно. Привязки UILabel стоят к центру по вертикали и горизонтали вьюхи, а также Equal Widths с вьюхой. Размер текста 250 для айпадов и 150 для айфонов, также стоит атрибут Autoshrink -> Maximum Font Scale (0.4) для сжатия размера текста в зависимости от количества символов.

Все проблемы начинаются с изменением количества Lines (строк) в UILabel. То есть, например, если поставить количество строк 3, то надпись "непереносимая невыносимость бытия" выглядит хорошо:
Кликните здесь для просмотра всего текста

Пляски вокруг UILabel (как нормально настроить перенос текста?)


А вот "ощущение безысходности" - уже не очень:
Кликните здесь для просмотра всего текста

Пляски вокруг UILabel (как нормально настроить перенос текста?)


Этой надписи гораздо комфортнее было бы со значением Lines - 2:

Кликните здесь для просмотра всего текста

Пляски вокруг UILabel (как нормально настроить перенос текста?)


То есть, при фиксированном количестве строк в зависимости от длины текста возникают уродливые переносы слов (ладно бы по правилам) и это очень печалит.
Как бы сделать так, чтобы, например, количество строк выставлялось в зависимости от количества слов, или просто отменить эти уродские переносы принудительно заставляя вывести минимум одно слово в строку? (пробовал играться с параметром Line Breaks - никакого эффекта(( )
Ну или посоветуйте, может, какое-нибудь другое решение, главное, чтобы текст читался и был крупным.
Заранее большое спасибо за любую попытку помочь)
Ответ: таак, уже почти добился, чего хотел, но почему-то не работает в портретной ориентации (в ландшафтной все ок). может, подскажете, чего я не замечаю?

Label на вьюхе один (pickupLabel), привязки - equal widths и equal heigths с view.

переделанная функция под Swift:
Кликните здесь для просмотра всего текста
Код Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
    func getSizeForText(text: NSString, maxWidth: CGFloat, fontName: String, fontSize:CGFloat) -> CGSize {
        var constraintSize: CGSize = CGSizeZero
        
        constraintSize.height = CGFloat.max
        constraintSize.width = maxWidth
        let attributesDictionary: NSDictionary = NSDictionary(objectsAndKeys: UIFont(name: fontName, size: fontSize)!, NSFontAttributeName)
        
        let frame: CGRect = text.boundingRectWithSize(constraintSize, options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: attributesDictionary, context: nil)
        
        let stringSize:CGSize = frame.size
        return stringSize
        
    }


viewDidLoad:
textFromInput - это строка со словами
Кликните здесь для просмотра всего текста
Код Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
override func viewDidLoad() {
        super.viewDidLoad()
 
    
 
let words = textFromInput.componentsSeparatedByString(" ")
 
let longest = words.reduce(String?()) {
    (longest, word) in
    longest == nil || countElements(word) > countElements(longest!) ? word : longest
   
}
 
    var maxs: CGSize = CGSizeZero
    var fontSize: CGFloat = 10
    do {
    fontSize++
    maxs = self.getSizeForText(longest!, maxWidth: CGFloat.max, fontName: "Helvetica", fontSize: fontSize)
    } while maxs.width < pickupLabel.frame.size.width
    
    
    pickupLabel.text = textFromInput
    pickupLabel.font = UIFont(name: "Helvetica", size: fontSize)
    pickupLabel.numberOfLines = 0
    
    println("Самое длинное слово: \(longest!)")
    println("Искомый максимальный размер шрифта: \(Int(fontSize))")
    println("Ширина рамки Label: \(pickupLabel.frame.size.width)")
    println("Ширина рамки View: \(self.view.frame.size.width)")
}

И что получается:

в портретной:
Кликните здесь для просмотра всего текста
Пляски вокруг UILabel (как нормально настроить перенос текста?)


в ландшафтной:
Кликните здесь для просмотра всего текста
Пляски вокруг UILabel (как нормально настроить перенос текста?)


пробовал сравнивать maxs с self.view.frame.size.width - но почему-то тоже ничего не получается(