- PVSM.RU - https://www.pvsm.ru -

Трудности перевода

Добрый вечер,

Сегодня я хотел бы написать небольшую заметку о своем приложении, которое только что появилось в App Store. Оно выполняет всего одну функцию, но, как мне кажется, выполняет ее довольно хорошо.

Скриншот

Если заинтересовало, то добро пожаловать под кат.

Движок

В первую очередь я хотел бы рассказать про то, как переводчик устроен изнутри. Для того, чтобы предоставить лучшие результаты поиска было решено использовать совместно Google Translate и Яндекс. Переводчик. Яндекс закрывает большую часть российской аудитории, а Google отвечает за большое количество иностранных языков.

С документацией обоих сервисов можно ознакомиться тут:
Яндекс [1]
Google [2]

После того, как было решено, где брать перевод — встала следующая задача: как реализовать функцию Copy-Translate (пользователь копирует в другом приложении текст и получает перевод в виде уведомления).

Это было решено следующим образом:

- (void) applicationDidEnterBackground:(UIApplication *)application {
	if ([[NSUserDefaults standardUserDefaults] boolForKey:@"copy_translate_enabled"]) {
		pastboardContents = [UIPasteboard generalPasteboard].string;
		
		__block UIBackgroundTaskIdentifier task;
		task = [application beginBackgroundTaskWithExpirationHandler:^{
			ALog(@"System terminated background task early");
			[application endBackgroundTask:task];
		}];
		
		// If the system refuses to allow the task return
		if (task == UIBackgroundTaskInvalid)
		{
			ALog(@"System refuses to allow background task");
			return;
		}
		
		// Do the task
		dispatch_async(dispatch_get_global_queue(0, 0), ^{
			for (int i = 0; i < 1000; i++)
			{
				[self checkPasteboard];
				
				// Wait some time before going to the beginning of the loop
				[NSThread sleepForTimeInterval:1];
			}
			
			// End the task
			[application endBackgroundTask:task];
		});
	}
}

Решение, конечно, не идеальное, но в условиях запрета на работу в фоне имеет право на жизнь.

Так же были реализованы URL-схемы, чтобы другие разработчики в случае необходимости могли интегрировать свои приложения с Translatify (хотя, конечно, мало кто этим будет заниматься). Описание схем выложено на http://handleopenurl.com [3].

Аналитика

В этом проекте я использовал два сервиса, которые помогают отслеживать статистику по поведению аудитории.

Первый — довольно известный Flurry [4] о котором уже очень много написано.

Второй — более интересный и менее известный Crittercism [5]. Этот сервис позволяет собирать crash-логи с устройств, чтобы постоянно делать пользователей счастливыми.

Open source

Было использовано несколько open source проектов, которые многим будут полезны:

JASidePanelController [6] (Боковые панели)
Appirater [7] (Предложение оценить приложение)
Block Alerts [8] (Помогает реализовать свой UI алертов)

Заключение

На этом все.

Все желающие могут купить приложение по ссылке (66 рублей): itunes.apple.com/ru/app/translatify/id604352244?mt=8 [9]

PS: Прошу прощения, что не в тот хаб. Кармы не хватает.

Автор: itruf

Источник [10]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/ios/30371

Ссылки в тексте:

[1] Яндекс: http://api.yandex.ru/translate/doc/dg/concepts/api-overview.xml

[2] Google: https://developers.google.com/translate/v2/getting_started?hl=ru

[3] http://handleopenurl.com: http://handleopenurl.com/scheme/translatify

[4] Flurry: http://www.flurry.com

[5] Crittercism: https://www.crittercism.com

[6] JASidePanelController: https://github.com/gotosleep/JASidePanels

[7] Appirater: https://github.com/arashpayan/appirater

[8] Block Alerts: https://github.com/gpambrozio/BlockAlertsAnd-ActionSheets

[9] itunes.apple.com/ru/app/translatify/id604352244?mt=8: https://itunes.apple.com/ru/app/translatify/id604352244?mt=8

[10] Источник: http://habrahabr.ru/post/174215/