Category Archives: iOS

Writing and appending data to files in iOS

If we want to create a file in iOS and write a lot of something there, we should firstly use NSFileManager class to create a file and then NSFileHandle class to write and append data. NSFileHandle class lets to append data to file and manage files more precisely, while NSFileManager class is simpler and lets to create and manage files and folders.

Firstly, we get a path to Documents directory(folder) and make a full file name:

NSArray *paths = NSSearchPathForDirectoriesInDomains
 (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSLog(@"%@",documentsDirectory);
//make a full file name
NSString *fileName = [NSString stringWithFormat:@"%@/yourFileName.txt", documentsDirectory];
NSLog(@"File path and name:%@", fileName);

Then we create an instance of NSFileManager class and check, if the file exists of not. And if not, then we create a file:

NSFileManager *filemgr;
filemgr = [NSFileManager defaultManager];
if ([filemgr fileExistsAtPath: fileName ] == YES)
 NSLog (@"File exists");
else
{
 NSLog (@"File not found");
 [filemgr createFileAtPath:fileName contents:nil attributes:nil];
}

Then we create an instance of NSFileHandle class to write and append data. We also convert NSString to NSData, since we can write only NSData to file. We also append \n to write each next record on a separate line. After we finish working with file, we should close it.

NSFileHandle *myHandle = [NSFileHandle fileHandleForWritingAtPath:fileName];
if (myHandle == nil)
 NSLog(@"Failed to open file");
NSString *content;
NSData *theData;
for (int i=0; i less 100, i++) {
 content = [NSString stringWithFormat:@"%d\n"
 NSLog(@"content: %@", content);
 theData=[content dataUsingEncoding:NSUTF8StringEncoding];
 [myHandle seekToEndOfFile];
 [myHandle writeData:theData];
}
[myHandle closeFile];

To find out a file, you should add a parameter “Application supports iTunes file sharing” to Info-Plist file, then look at your application’s files in iTunes. If you use Simulator, then you should go to Finder, press Go or Shift+Cmd+G and type ~/Library, then go to Application Support/iPhone Simulator/5.0/Applications/Some number/Documents.

References and useful links:

“ZXingWidgetController.h not found” ZXing installation problem solution

After investigation of all commentaries in
How to install ZXing in Xcode 4 I finally solved a problem of “ZXingWidgetController.h not found”. But to totally solve it, you must do several things and none of the commentaries contain them all. So I decided to write here, what you should do to finally solve this problem. So,

  1. Your full project path should not contain space characters. For example, “AppName 1.0” is not correct. You should use “AppName_1.0” or “AppName1.0”. This is because the search of header paths and user header paths doesn’t work properly otherwise.
  2. Let’s assume that your zxing folder is located in the root of your app folder. Then your header search paths should be something like this:

    For copy paste purposes:

  3. You should repeat this also for User Header Search Paths

Commentary on installation and using of ZXing:
When you import it to your project, firstly restart Xcode and open only your project one time. Then drag ZXingProject file to your target on Project Navigation bar. There must be a plus sign at the left. Drag zing from your project folder. Copy ZXing to your project folder firstly in this way:

Don’t forget to check a compiler for ZXingWidget Project. It might be old GCC compiler. It must be edited to Apple LLVM Compiler:

Also, it is very important, that you have only one copy of source files in the directory of application project. Otherwise, you might get errors like this.

References:

  1. http://yannickloriot.com/2011/04/how-to-install-zxing-in-xcode-4/
  2. http://zxing.googlecode.com/svn/trunk/iphone/
  3. http://debugfix.com/2011/11/unsupported-compiler-gcc-4-2-selected-for-architecture-i386/

Что нового в iOS 5 ?

Обновление ПО iOS 5

Данное обновление содержит свыше 200 новых функций и возможностей, включая следующие:

• Уведомления:
◦ просматривайте уведомления, собранные в Центре уведомлений, выполнив жест смахивания вниз в верхней части любого экрана;
◦ новые уведомления появляются ненадолго в верхней части экрана;
◦ просматривайте уведомления на заблокированном экране;
◦ переход непосредственно в программу осуществляется с помощью скользящего жеста по значку программы уведомлений вправо на заблокированном экране.
• iMessage:
◦ неограниченно обменивайтесь с другими пользователями iOS 5 текстовыми сообщениями, а также сообщениями с фотографиями и видео;
◦ отслеживайте сообщения с помощью отчетов о доставке и прочтении;
◦ групповые сообщения и безопасное шифрование;
◦ работает через сотовую сеть и Wi-Fi*.
• Киоск:
◦ автоматически сортирует подписки на журналы и газеты, расположенные на экране «Домой»;
◦ отображает обложку последнего просмотренного номера журнала и газеты;
◦ загрузки новых номеров в фоновом режиме.
• Напоминания для работы со списками задач:
◦ синхронизация с iCloud, iCal и Outlook;
◦ основанные на геопозиции напоминания, получаемые по убытии или прибытии по адресу; работают на iPhone 4S и iPhone 4.
• Встроенная поддержка Twitter:
◦ выполните единовременный вход в Настройках и отправляйте твиты непосредственно из программ «Камера», «Фото», «Карты», а также из Safari и YouTube;
◦ добавляйте геопозицию в любой твит;
◦ изображения и имена пользователей профиля Twitter отображаются в Контактах.
• Улучшения функций камеры для устройств, оборудованных камерой:
◦ дважды нажмите кнопку «Домой» на устройстве, находящемся в режиме сна, чтобы отобразить значок быстрого доступа к камере на iPhone 4S, iPhone 4, iPhone 3GS и iPod touch (4-го поколения);
◦ возможность использования кнопки увеличения громкости для съемки фотографий;
◦ возможность использования линий координатной сетки для выравнивания положения камеры при съемке;
◦ изменение масштаба на экране предварительного просмотра жестом хватания всеми пальцами;
◦ перейдите в раздел «Фотопленка» с экрана просмотра с помощью жеста смахивания;
◦ нажмите и удерживайте палец на экране для блокировки автофокуса и автоэкспозиции; iPad 2 и iPod touch (4-го поколения) поддерживают только блокировку экспозиции.
• Улучшения фотофункций для устройств, оборудованных камерой:
◦ функция «Обрезать и повернуть»;
◦ удаление эффекта красных глаз;
◦ функция улучшения фотографии одним нажатием;
◦ возможность размещения фотографий в альбомы.
• Улучшения в программе Mail:
◦ форматирование текста с помощью жирных, курсивных или подчеркнутых шрифтов;
◦ возможность изменять отступы в тексте;
◦ изменение порядка имен в адресных полях перетягиванием;
◦ возможность помечать сообщения флажками;
◦ возможность помечать несколько сообщений флажком, как прочитанные или непрочитанные;
◦ изменение звуков предупреждений о получении сообщений e-mail;
◦ S/MIME.
• Улучшения в программе «Календарь»:
◦ вид «Год» на iPad и новый вид «Неделя» для iPhone и iPod touch;
◦ создание события нажатием;
◦ просмотр и добавление вложений событий.
• Улучшения в программе Game Center:
◦ использование собственных фотографий для учетной записи Game Center;
◦ сравнение общих результатов достижений с друзьями;
◦ поиск новых друзей в Game Center с помощью рекомендаций друзей и друзей друзей;
◦ открытие для себя новых игр с настраиваемыми рекомендациями по играм.
• Видеоповтор AirPlay для iPad 2 и iPhone 4S
• Жесты многозадачности для iPad:
◦ используйте жест хватания 4 или 5 пальцами, чтобы перейти на экран «Домой»;
◦ выполните жест смахивания вверх для показа строки многозадачности;
◦ выполните жест смахивания влево/вправо для переключения между программами.
• Настройка, активация и конфигурация непосредственно на устройстве с помощью Ассистента настройки
• Доступность беспроводных обновлений ПО (без использования кабеля)
• Поддержка iCloud:
◦ функция «iTunes в облаке»;
◦ Фотопоток;
◦ функция «Документы в облаке»;
◦ автоматическая история загрузок и покупок программ и книг;
◦ резервное копирование;
◦ Контакты, Календарь и Mail;
◦ функция «Найти iPhone».
• Переработанная программа «Музыка» для iPad
• Ежечасные прогнозы погоды
• Биржевые сводки в режиме реального времени
• Беспроводная синхронизация с iTunes
• Улучшения клавиатуры:
◦ разделенная клавиатура для iPad;
◦ повышенная точность автокоррекции;
◦ улучшенные методы ввода китайских и японских символов;
◦ новая клавиатура Эмодзи;
◦ личный словарь для автокоррекции;
◦ возможность создания сочетаний клавиш (сокращений) для наиболее часто используемых слов.
• Улучшения Универсального доступа:
◦ возможность использования LED-вспышки для индикации входящих вызовов и предупреждений для iPhone 4S и iPhone 4;
◦ пользовательские рисунки вибрации для входящих вызовов на iPhone;
◦ новый пользовательский интерфейс для использования iOS со средствами реабилитации людей с ограничениями жизнедеятельности;
◦ возможность проговаривания выбранного текста вслух;
◦ пользовательская маркировка элементов для VoiceOver.
• Улучшения Exchange ActiveSync:
◦ беспроводная синхронизация задач;
◦ возможность помечать сообщения флажком, как прочитанные или непрочитанные;
◦ улучшенная офлайновая поддержка;
◦ сохранение нового контакта из глобального списка адресов GAL.
• Более 1500 новых API для разработчиков
• Исправления ошибок

Продукты, совместимые с этим обновлением ПО:
• iPhone 4S;
• iPhone 4;
• iPhone 3GS;
• iPad 2;
• iPad;
• iPod touch (4-го поколения);
• iPod touch (3-го поколения).

* Операторами сотовой связи может взиматься обычная плата за передачу данных. Сообщения отправляются как SMS, если функция iMessage недоступна. Операторами сотовой связи взимается плата за доставку сообщений.

Подробную информацию о системе безопасности данного обновления см. на веб-сайте:
http://support.apple.com/kb/HT1222?viewlocale=ru_RU

How-To: URL Encode NSString with UTF-8 Characters in Objective-C

Let’s say you have to send a POST HTTP request that contains UTF-8 characters. But the problem is that url will not be formed if you simply try to generate it from a string. I managed that problem in the following way:

[crayon-5f0b59435cea8584182464/]

References:

http://blog.evandavey.com/2009/01/how-to-url-encode-nsstring-in-objective-c.html

How to export a file to iPhone documents folder programmatically

Here I give an example of how to export a file to iPhone documents folder programmatically. I spent a lot of time on managing of how to do it. My main problem was that I couldn’t find documents folder of iPhone simulator. I couldn’t write anything to file and I used a wrong way with NSData class. Finally, I found a recipe in Internet and modified it a little bit.

So look at the example:

This is just a method. Firstly, we discover a documents Directory of a device. Then we NSLog it in order to find that directory on Mac, if we use iPhone/iPad simulator. Then we make a file name to write the data to using the documents directory. Then create content – four lines of text, including even some non ASCII text(that’ the modification). Then we just save content to the documents directory. Now that file is available through iTunes in programs tab, in the bottom of it for the given Applicaton. Note that you should add “Application supports iTunes file sharing” line and check it in your Info.plist file for your application in order to be able to use iTunes/iPhone/Programs/Your app to share files. Also note that encoding:NSUTF8StringEncoding is needed if you want to use non ASCII letters.

[crayon-5f0b594363d67643019009/]

SQLite on Mac OS X examples

Here I decided to write some SQLite(SQLite on wiki) on Mac OS X examples of code for creation of database and database management.

1. Go to the folder where you want to create SQLite database (all this is written on Applications/Services/Terminal):

cd /Users/user/Documents/

2. Create database:

sqlite3 SimpleVocabulary.sql

3. Create table in that database:

CREATE TABLE Cards(CardID VARCHAR(5) PRIMARY KEY, Word VARCHAR(1000), Translation VARCHAR(3000), MemoStatus VARCHAR(1));

4. Insert values to the table:

INSERT INTO Cards VALUES ("1", "Mother", "Mama", "Y");

5. Select values from table:

SELECT * FROM Cards;

Another code examples:

1. cd /Users/user/Documents/
2. sqlite3 TexDatabase.sql
1.SELECT * FROM Lessons;
2.SELECT COUNT(*) FROM Lessons;
3.DELETE FROM Lessons;
4.CREATE TABLE Lessons(LessonID VARCHAR(5) PRIMARY KEY, LessonGroup VARCHAR(5), LessonTopic VARCHAR(100), LessonText VARCHAR(20000), LessonCode VARCHAR(100), LessonPicture VARCHAR(100));
5.Drop table Lessons;
6..schema

Here .schema command allows you to look at your tables structure.

Another example:
1. cd /Users/user/Desktop/Alwawee/AlwaweeApps/Бизнес-цитаты/Database
2. sqlite3 BusCitDatabase.sql
3. sqlite> CREATE TABLE BusCits(ID VARCHAR(5) PRIMARY KEY, Text VARCHAR(3000), Author VARCHAR(500));
4. sqlite> .quit
5. SELECT COUNT(*) FROM BusCits;
6. SELECT COUNT(*) FROM BusAuthors;
7. sqlite> CREATE TABLE BusAuthors(AuthorID VARCHAR(5) PRIMARY KEY, AuthorName VARCHAR(100), AuthorInfo VARCHAR(3000));
8. SELECT COUNT(*) FROM BusAuthors;
9. DELETE FROM BusAuthors;
10. DELETE FROM BusCits;
11. SELECT DISTINCT Author FROM BusCits WHERE Author NOT IN(SELECT AuthorName FROM BusAuthors);
12. cd /Users/user/Documents/
13. cd SimpVoc
14. sqlite3 TransWords.sql
15. INSERT INTO Cards VALUES ("1", "Mother", "Madre", "Y");
16. INSERT INTO Cards VALUES ("2", "Example", "Ejemplo", "Y");
17. INSERT INTO Cards VALUES ("3", "World", "Mundo", "Y");
18. SELECT * FROM Cards;

Here .quit command quits sqlite> mode on your Terminal.

Tips & Tricks загрузки приложения в iTunes Store

После разработки приложения для iPhone возникла необходимость публикации его в iTunes Store. Основные вещи, которые нужно знать, чтобы загрузить его без проблем:

1. Желательно скачать и обязательно нужно прочитать все доступные руководства самого Apple. Если вы пользуетесь XCode 4, то скачайте XCode 4 User Guide. Не пожалеете.  А лучше и вовсе используйте XCode 3 пока, потому что лично у меня и у других XCode 4 падал при Submit приложения. Он еще очень сырой. Лучше всю документацию читать с первых рук, из первоисточников и самые свежие версии, скачав их самостоятельно с сайта Apple. Нужно прочитать iOS Development Guide. Инструменты разработки и публикации все время меняются и нужно всегда быть в курсе, читать все только самое свежее и не читать устаревшие руководства, в том числе и устаревшие YouTube видеоролики. Они вам слабо помогут и даже принесут вред и дезинформацию. Если нет ничего свежего, то лучше читать в первоисточниках, то есть руководствах самого Apple, так как все постоянно у них меняется. Читать устаревшию информацию и смотреть старые видеоролики – это все равно, что пить прокисшее молоко. Польза есть, но может быть и вред, причем это довольно невкусно.

2. Нужно учитывать и знать, что есть 2 типа Provisioning Profiles(Профайлы подготовки приложений) – Distribution и Development. В Distribution профайле недоступна привязка девайса(Device). Не нужно ломать голову на счет этого. У вас не получится сделать Distribution Build с привязкой к девайсу. На девайс можно поставить приложение только в Development Build. Я на этот пункт потратил очень много времени, пытаясь понять, почему я не могу привязать Device к Distribution Provisioning Profile.

3. На сайте Apple все написано, но и там есть устаревшая информация и неработающие руководства. Например, я потратил кучу времени на то, чтобы загрузить приложение с помощью приложения Application Loader. На самом же деле, после того, как я спросил на нескольких форумах, почему я не могу загрузить, я понял две вещи. Первая – это то, что Apple под Application Bundle понимает файл *.app, который лежит в Products и который заархивирован в формат *.zip. При этом оказалось, что и вовсе Application Loader’ом не надо пользоваться пока, а надо загружать в XCode. Нажимаем меню Products->Archive. Далее заходим в Organiser->Archives и нажимаем Submit. При этом учитывайте, что и то, что я написал здесь, может устареть через неделю. Поэтому если что-то не получается, сразу задавайте вопросы на форумах. Мне помогли.

4. Не следует думать, что рисунки 100х100 сами конвертируются в нужный вид, например 57×57. При тестировании у вас все будет работать, но загрузить такое приложение не получится или будут проблемы. Лучше все рисунки делать в нужных вам размерах и причем так, чтобы они затем не растягивались и не сжимались на экране iPhone. От этого только хуже. Делайте четко. 40×40 у вас иконка – так 40х40, не надо делать 100х100 в надежде, что она хорошо сконвертируется на девайсе.

5. Ярлык приложения лучше назвать icon.png, положить его в корень и прописать в info Plist. Заставку не надо нигде прописывать, нужно просто создать рисунок размерами 320х480, назвать его Default.png и положить в корень. Кроме этого, рекоммендую вам сразу нарисовать иконку приложения в более крупном варианте 512х512. Это пригодится, когда вы будете создавать страницу приложения в iTunes Store. При этом png должен быть настоящим, а не полученным искусственно из jpg. Такой вариант будет работать только на симуляторе.

6. Перед разработкой установите последнюю версию SDK, иначе придется исправлять потом ошибки, переназначать библиотеки. При этом напоминаю, что лучше продолжать пользоваться XCode 3, а не XCode 4. Когда будете компилировать приложение, в настройках укажите минимальную версию iOS, на которой ваше приложение будет работать. Лучше поставить самую маленькую версию, которая только возможна для вашего приложения, так как приложения написанные для поздних версий, могут быть недоступны в Verizon.

7. Зарегиструйтесь и задавайте вопросы на всех форумах и читайте разные блоги и сайты, посвященные разработке под iOS.

8. Когда будете загружать через кнопку Submit или через Application Loader не удивляйтесь тому, что у вас 0%. Не выключая загрузку, посмотрите в iTunes Connect состояние вашего приложения. Если оно стало Waiting for Review, значит, вам удалось загрузить приложение. У меня так было.

Итак, если что-то не знаете, спросите у знающих.

 

Все это желательно знать, чтобы сэкономить время.