<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-756832270391248479</atom:id><lastBuildDate>Thu, 03 Oct 2024 21:12:56 +0000</lastBuildDate><category>iOS</category><category>Objective C</category><category>xCode</category><category>notes</category><category>iPhone OS</category><category>iPhone</category><category>terminal</category><category>*nix</category><category>ffmpeg</category><category>video</category><category>Mac OS</category><category>Ubuntu</category><category>convert</category><category>mpeg4</category><category>простые вещи</category><category>MP4Box</category><category>OS X</category><category>audio</category><category>bash</category><category>cut</category><category>iTunes</category><category>localization</category><category>svn</category><category>x264</category><category>AtomicParsley</category><category>MapKit</category><category>Photos</category><category>UITableView</category><category>UIWebView</category><category>apt</category><category>hdiutil</category><category>iTunes Store</category><category>install Linux</category><category>iso</category><category>link</category><category>samba</category><category>screenshot</category><category>subtitles</category><category>template</category><category>web</category><category>3GPP timed text</category><category>ARC</category><category>AppStore</category><category>CoreTelephony</category><category>DS_Store</category><category>Local Notification</category><category>Lotus Notes</category><category>Nautilus</category><category>Open Office</category><category>Push Notification</category><category>SDK</category><category>Safari</category><category>SubRip Text</category><category>UIGestureRecognizer</category><category>UILabel</category><category>UINavigationBar</category><category>UISearchBar</category><category>VMWare server</category><category>Wi-Fi</category><category>algoritms</category><category>app</category><category>backup</category><category>certificate</category><category>conky</category><category>date/time</category><category>dd</category><category>deprecated</category><category>downmix</category><category>file sharing</category><category>follow2iPhone</category><category>fonts</category><category>gcc</category><category>git</category><category>github</category><category>gparted</category><category>iPod Touch</category><category>iconv</category><category>internet</category><category>ipa</category><category>keyboard</category><category>landscape</category><category>lg-g1800</category><category>life</category><category>mkvtools</category><category>mySQL</category><category>oauth</category><category>orientation</category><category>parted</category><category>partitions</category><category>plist</category><category>poster</category><category>printer</category><category>python</category><category>record</category><category>retina</category><category>samsung ml-1210</category><category>srt</category><category>ssh</category><category>ssh-agent</category><category>static library</category><category>system</category><category>system preference</category><category>tomcat</category><category>ttxt</category><category>twitter</category><category>wine</category><category>xcodebuild</category><category>генетика</category><category>каптча</category><category>кодировка</category><category>ноутбук</category><category>переводы</category><category>смайлики</category><title>покопался я тут...</title><description>... моя записная книжка найденных (интернете\мозгу) решений</description><link>http://blog.derand.net/</link><managingEditor>noreply@blogger.com (derand)</managingEditor><generator>Blogger</generator><openSearch:totalResults>107</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><language>en-us</language><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-2317504664834661750</guid><pubDate>Tue, 10 Sep 2013 19:53:00 +0000</pubDate><atom:updated>2013-09-10T22:55:04.328+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">*nix</category><category domain="http://www.blogger.com/atom/ns#">bash</category><title>Динамическое добавление swap в Linux</title><description>Сегодня, на очень короткое время на компьютере понадобилось добавить swap, переразбивать ради этого диск с системой совсем не хотелось. Оказывается в Linux можно создать файл и сказать системе использовать его как своп. Спасибо &lt;a href="http://breys.ru/blog/227.html"&gt;блогу&lt;/a&gt; за простое решение.
&lt;br /&gt;
&lt;pre class="brush: bash"&gt;$ free -m
 total used free shared buffers cached
Mem: 2018 1225 793 0 7 335
-/+ buffers/cache: 882 1135
Swap: 2957 124 2832
$ dd if=/dev/zero of=swap.swap bs=1M count=100
100+0 записей считано
100+0 записей написано
скопировано 104857600 байт (105 MB), 0,768403 c, 136 MB/c
$ mkswap swap.swap
Устанавливается пространство для свопинга версии 1, размер = 104853 кБ
без метки, UUID=1b3f8a75-8214-406b-9841-a5f82bf56ae8
$ sudo swapon swap.swap
$ free -m
 total used free shared buffers cached
Mem: 2018 1327 691 0 7 436
-/+ buffers/cache: 883 1135
Swap: 3057 124 2932&lt;/pre&gt;

и для удаления

&lt;pre class="brush: bash"&gt;
$ sudo swapoff swap.swap
$ rm swap.swap
$ free -m
 total used free shared buffers cached
Mem: 2018 1239 778 0 8 348
-/+ buffers/cache: 883 1135
Swap: 2957 124 2832&lt;/pre&gt;
</description><link>http://blog.derand.net/2013/09/swap-linux.html</link><author>noreply@blogger.com (derand)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-4293791705637076275</guid><pubDate>Sat, 27 Apr 2013 20:42:00 +0000</pubDate><atom:updated>2013-09-10T22:57:57.101+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">iOS</category><category domain="http://www.blogger.com/atom/ns#">Objective C</category><title>Смена ориентации экрана в модальном окне iOS 5/6</title><description>Случилось мне недавно делать приложение для iOS, которое работает в портретной ориентации экрана и только одно вью (которое отображалось модально) нужно было отображать только в ландшафтной ориентации экрана. Что ж, решение для iOS 5.х довольно простое: в методе &lt;a href="http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/DeprecationAppendix/AppendixADeprecatedAPI.html#//apple_ref/occ/instm/UIViewController/shouldAutorotateToInterfaceOrientation:"&gt;- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation&lt;/a&gt; модального окна просто прописываем нужный разворот устройства
&lt;br&gt;
&lt;br&gt;
&lt;pre class="brush: c"&gt;-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    return (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
&lt;/pre&gt;
&lt;br&gt;
&lt;br&gt;
Для iOS 6.x все оказалось немного сложнее:
&lt;br&gt;
&lt;br&gt;
1. В классе вью контроллера модального окна определяем обработчики методов
&lt;br&gt;
&lt;br&gt;
&lt;pre class="brush: c"&gt;- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
 return UIInterfaceOrientationLandscapeRight;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;
}

- (BOOL)shouldAutorotate
{
    return YES;
}&lt;/pre&gt;
&lt;br&gt;
&lt;br&gt;
2. Сразу после вызова показа модального окна устанавливаем положение статус бара:
&lt;br&gt;
&lt;br&gt;
&lt;pre class="brush: c"&gt; [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:NO];&lt;/pre&gt;&lt;br&gt;
&lt;br&gt;
3. Перед тем, как убрать модальное окно, возвращаем статус бар в нужное положение:
&lt;br&gt;
&lt;br&gt;
&lt;pre class="brush: c"&gt; [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:NO];&lt;/pre&gt;
&lt;br&gt;
&lt;br&gt;
Как обычно &lt;a href="https://github.com/derand/AnotherModalViewOrientation"&gt;пример&lt;/a&gt; на github-е.
</description><link>http://blog.derand.net/2013/04/ios-56.html</link><author>noreply@blogger.com (derand)</author><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-6710237409074534193</guid><pubDate>Sun, 16 Dec 2012 17:15:00 +0000</pubDate><atom:updated>2012-12-16T19:15:59.056+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">iOS</category><category domain="http://www.blogger.com/atom/ns#">Objective C</category><title>UIDatePicker как клавиатура для UITextField</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsy_ejvCUDzYAmF-4wEaaWicihCewdrL0rcCpVbn7rr1WWVFRt_eFPY_-0vhweP7a29p_EYE11yobnyexct_veyMOEGsc3WrjbYV2SQeFsl-Osc-8s4LvxhKq1pugcXyH54GV3qLCDH_Y/s1600/screenshot.png" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsy_ejvCUDzYAmF-4wEaaWicihCewdrL0rcCpVbn7rr1WWVFRt_eFPY_-0vhweP7a29p_EYE11yobnyexct_veyMOEGsc3WrjbYV2SQeFsl-Osc-8s4LvxhKq1pugcXyH54GV3qLCDH_Y/s320/screenshot.png" /&gt;&lt;/a&gt;&lt;/div&gt;

Цель: сделать удобной выбор даты в &lt;a href="https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UITextField_Class/Reference/UITextField.html"&gt;UITextField&lt;/a&gt;, будем использовать &lt;a href="https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIDatePicker_Class/Reference/UIDatePicker.html"&gt;UIDatePicker&lt;/a&gt;
&lt;br /&gt;
Алгоритм: перехватим событие &lt;i&gt;&lt;a href="https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextFieldDelegate_Protocol/UITextFieldDelegate/UITextFieldDelegate.html#//apple_ref/occ/intfm/UITextFieldDelegate/textFieldShouldBeginEditing:"&gt;- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField&lt;/a&gt;&lt;/i&gt; у &lt;i&gt;UITextField&lt;/i&gt; и вместо показа системной клавиатуры, покажем наше вью.
&lt;br /&gt;
&lt;br /&gt;
Думаю не стоит описывать процесс создания и назначения делегата у &lt;i&gt;UITextField&lt;/i&gt;, это можно сделать как в Interface Builder-е так и динамически. Сразу смотрим метод делегата &lt;i&gt;-(void)textFieldDidBeginEditing:(UITextField *)textField&lt;/i&gt;:

&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: c"&gt;- (void)textFieldDidBeginEditing:(UITextField *)aTextField
{
 [aTextField resignFirstResponder];
 
 [_pickerViewPopup release];
 _pickerViewPopup = [[UIActionSheet alloc] initWithTitle:nil delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
 
 [_pickerView release];
 _pickerView = [[UIDatePicker alloc] initWithFrame:CGRectMake(0.0, 44.0, 0.0, 0.0)];
 _pickerView.datePickerMode = UIDatePickerModeDate;
 _pickerView.hidden = NO;
 _pickerView.date = [NSDate date];
 [_pickerView addTarget:self action:@selector(dateChanged) forControlEvents:UIControlEventValueChanged];
 
 UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 44.0)];
 pickerToolbar.barStyle = UIBarStyleBlackOpaque;
 [pickerToolbar sizeToFit];
 
 NSMutableArray *barItems = [[NSMutableArray alloc] init];
 
 UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
 [barItems addObject:flexSpace];
 [flexSpace release];
 
 UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed:)];
 [barItems addObject:doneBtn];
 [doneBtn release];
 
 UIBarButtonItem *cancelBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelButtonPressed:)];
 [barItems addObject:cancelBtn];
 [cancelBtn release];
 
 [pickerToolbar setItems:barItems animated:YES];
 [barItems release];
 
 [_pickerViewPopup addSubview:pickerToolbar];
 [_pickerViewPopup addSubview:_pickerView];
 [_pickerViewPopup showInView:self.window];
 [_pickerViewPopup setBounds:CGRectMake(0.0, 0.0, 320.0, 464.0)];
 [pickerToolbar release];
}&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
тут мы создаем модальное окно, на основе &lt;a href="https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIActionSheet_Class/"&gt;UIActionSheet&lt;/a&gt; и в него вставляем &lt;i&gt;UIDatePicker&lt;/i&gt; и &lt;a href="https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIToolbar_Class/"&gt;UIToolbar&lt;/a&gt; с кнопками "Ok" и "Cancel".
&lt;br /&gt;
&lt;br /&gt;
И события нажатия на эти кнопки:
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: c"&gt;- (void)doneButtonPressed:(id)sender
{
 self.dt = [_pickerView date];
 
 [_pickerViewPopup dismissWithClickedButtonIndex:1 animated:YES];
 [_pickerView removeTarget:self action:@selector(dateChanged) forControlEvents:UIControlEventValueChanged];
}

- (void)cancelButtonPressed:(id)sender
{
 [_pickerViewPopup dismissWithClickedButtonIndex:1 animated:YES];
 [_pickerView removeTarget:self action:@selector(dateChanged) forControlEvents:UIControlEventValueChanged];
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
В обоих случаях скрываем наше "модельное" окно и отписываемся от события получения нотификации о изменении даты на &lt;i&gt;UIDatePicker&lt;/i&gt;. А при нажатии на "Ok" так-же сохраняем выбранную дату на "барабане".
&lt;br /&gt;
&lt;br /&gt;
И событие изменения даты на &lt;i&gt;UIDatePicker&lt;/i&gt; для изменения даты так-же в текстовом поле:
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: c"&gt;- (void)dateChanged
{
 NSDateFormatter *df = [[NSDateFormatter alloc] init];
 [df setDateFormat:@&amp;quot;dd.MM.yy&amp;quot;];
 _tf.text = [df stringFromDate:[_pickerView date]];
}&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Проект на &lt;a href="https://github.com/derand/DatePickerKeyboard"&gt;github&lt;/a&gt;-е. Утащено с &lt;a href="http://stackoverflow.com/questions/7308754/datepicker-by-clicking-on-textfield"&gt;stackoverflow&lt;/a&gt;.</description><link>http://blog.derand.net/2012/12/uidatepicker-uitextfield.html</link><author>noreply@blogger.com (derand)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsy_ejvCUDzYAmF-4wEaaWicihCewdrL0rcCpVbn7rr1WWVFRt_eFPY_-0vhweP7a29p_EYE11yobnyexct_veyMOEGsc3WrjbYV2SQeFsl-Osc-8s4LvxhKq1pugcXyH54GV3qLCDH_Y/s72-c/screenshot.png" width="72"/><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-4188431772773306508</guid><pubDate>Sun, 09 Dec 2012 15:31:00 +0000</pubDate><atom:updated>2013-02-10T14:19:13.566+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">iOS</category><category domain="http://www.blogger.com/atom/ns#">Objective C</category><title>Применение изображения-маски на UIView</title><description>После длительного перерыва решил опубликовать новый пост в блоге. 
&lt;br /&gt;
&lt;br /&gt;
Традиционно все UIView в iOS имеют прямоугольную форму. И с помощью полупрозрачного цвета (так-же изображений с alpha каналом) и порядком (z-order) наложения вью друг на друга можно добиваться практически всего, что можно вообразить. Но вот понадобился мне полупрозрачный свой UISwitch в котором был предопределен порядок вьюшек.
&lt;br /&gt;
&lt;br /&gt;
И что б этот пост не был постом об одном методе, опишу процесс создания компоненты.
&lt;br /&gt;
&lt;br /&gt;
Есть изображения:
&lt;br /&gt;
&lt;br /&gt;
1. подложка компоненты &lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCnnoO-H9-8ujcAPrHwMaDD6wtBUtooKCTYXRlZp2aVPCwf7NQwh3Brv8zgJaMj-r7DdJHRis99lxbF3VKs4gyL47K4-dy7hv-XBBCcSPNSHlvC4755rVXvVTslYqtiT5r5sZvDZkYQ50/s1600/butt_bg.png" imageanchor="1"&gt;&lt;img border="0" height="25" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCnnoO-H9-8ujcAPrHwMaDD6wtBUtooKCTYXRlZp2aVPCwf7NQwh3Brv8zgJaMj-r7DdJHRis99lxbF3VKs4gyL47K4-dy7hv-XBBCcSPNSHlvC4755rVXvVTslYqtiT5r5sZvDZkYQ50/s320/butt_bg.png" width="65" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
2. маска под эту подложку &lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTi3a67YUPfZcobGiV9PU5f2q48o5fqE8DK5fgCzlfjKl5JCt-c0PWSU_GVCHlhDc-_zrcUMzBBWQhqc_o3h6fBTLrDKpzNe2nBYvl3OPEHpfJ7wiIikDZSOnmZtUNoA6sUFQCbLDkJU8/s1600/butt_mask.png" imageanchor="1"&gt;&lt;img border="0" height="25" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTi3a67YUPfZcobGiV9PU5f2q48o5fqE8DK5fgCzlfjKl5JCt-c0PWSU_GVCHlhDc-_zrcUMzBBWQhqc_o3h6fBTLrDKpzNe2nBYvl3OPEHpfJ7wiIikDZSOnmZtUNoA6sUFQCbLDkJU8/s320/butt_mask.png" width="65" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
3. включенное &lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBeMh_m2W5IH1HglWVAMohuf7B2VzGE5gbAhFa9vUjKyMu69B2rHJ9zXhvrHPa17wyQGCa5HeJeag-XSxpxPNPH-7ZWzA727WSz5QjFYLrA6jteoZT_RNwdBbH6orpuuyqlQ1nMhTAeCM/s1600/r_butt_on.png" imageanchor="1"&gt;&lt;img border="0" height="24" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBeMh_m2W5IH1HglWVAMohuf7B2VzGE5gbAhFa9vUjKyMu69B2rHJ9zXhvrHPa17wyQGCa5HeJeag-XSxpxPNPH-7ZWzA727WSz5QjFYLrA6jteoZT_RNwdBbH6orpuuyqlQ1nMhTAeCM/s320/r_butt_on.png" width="24" /&gt;&lt;/a&gt;

 и выключенное &lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqHuwkAW23OD8IhDxB581SjcKtifhTaAZv89fSo1WjxlO9hjC39C5fOEhwgdYDdLuoMHWSVVO0dl7PO4eg0VJBeayRRj-fnabCfQRy-l7WI5hUyVjiK1LToqZLrRfR4hMPntxdR1nz82Q/s1600/r_butt_off.png" imageanchor="1"&gt;&lt;img border="0" height="24" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqHuwkAW23OD8IhDxB581SjcKtifhTaAZv89fSo1WjxlO9hjC39C5fOEhwgdYDdLuoMHWSVVO0dl7PO4eg0VJBeayRRj-fnabCfQRy-l7WI5hUyVjiK1LToqZLrRfR4hMPntxdR1nz82Q/s320/r_butt_off.png" width="24" /&gt;&lt;/a&gt; состояния
&lt;br /&gt;
&lt;br /&gt;
Наследоваться будем от UIView.
&lt;br /&gt;
&lt;br /&gt;
В методе init будем создавать вью которые нам и понадобятся.
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: c"&gt;  _backgroundImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"butt_bg"]];
  [self addSubview:_backgroundImage];&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
создаем подложку компоненты и добавляем ее на родительское вью 
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: c"&gt;  UIView *maskedView = [[UIView alloc] initWithFrame:self.bounds];
  maskedView.backgroundColor = [UIColor clearColor];
  [self addSubview:maskedView];&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
создаем вью, к которому будет примененна маска, на него будем ложить дальше компоненты для того, что б они не вылазили за пределы внутреннего "овала"
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: c"&gt;  _backgroundView = [[UIScrollView alloc] initWithFrame:self.bounds];
  _backgroundView.backgroundColor = [UIColor clearColor];
  _backgroundView.clipsToBounds = YES;
  _backgroundView.delegate = self;
  _backgroundView.clearsContextBeforeDrawing = NO;
  _backgroundView.pagingEnabled = YES;
  _backgroundView.showsVerticalScrollIndicator = NO;
  _backgroundView.showsHorizontalScrollIndicator = NO;
  _backgroundView.scrollsToTop = NO;
  _backgroundView.contentSize = CGSizeMake(105.0, _backgroundView.bounds.size.height);
  _backgroundView.bounces = NO;
  [maskedView&amp;nbsp;addSubview:_backgroundView];
  
  _onLabel = [[UILabel alloc] initWithFrame:CGRectZero];
  _onLabel.backgroundColor = [UIColor clearColor];
  _onLabel.opaque = NO;
  _onLabel.textColor = [UIColor blackColor];
  _onLabel.font = [UIFont boldSystemFontOfSize:16.0];
  _onLabel.textAlignment = UITextAlignmentCenter;
  _onLabel.text = NSLocalizedString(@"ON", nil);
  _onLabel.frame = CGRectMake(0.0, 0.0, 43.0, _backgroundView.frame.size.height);
  [_backgroundView addSubview:_onLabel];

  UIImage *img = [UIImage imageNamed:@"r_butt_on"];
  _ballImage0 = [[UIImageView alloc] initWithImage:img];
  _ballImage0.frame = CGRectMake((_backgroundView.contentSize.width-img.size.width)/2.0,
         &amp;nbsp; (_backgroundView.contentSize.height-img.size.height)/2.0,
         &amp;nbsp; img.size.width, img.size.height);
  [_backgroundView addSubview:_ballImage0];
  
  img = [UIImage imageNamed:@"r_butt_off"];
  _ballImage1 = [[UIImageView alloc] initWithImage:img];
  _ballImage1.frame = _ballImage0.frame;
  _ballImage1.alpha = 0.0;
  [_backgroundView addSubview:_ballImage1];
  
  _offLabel = [[UILabel alloc] initWithFrame:CGRectZero];
  _offLabel.backgroundColor = [UIColor clearColor];
  _offLabel.opaque = NO;
  _offLabel.textColor = [UIColor blackColor];
  _offLabel.font = [UIFont boldSystemFontOfSize:16.0];
  _offLabel.textAlignment = UITextAlignmentCenter;
  _offLabel.text = NSLocalizedString(@"OFF", nil);
  _offLabel.frame = CGRectMake(60.0, 0.0, 43.0, _backgroundView.frame.size.height);
  [_backgroundView addSubview:_offLabel];&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
тут &lt;i&gt;_backgroundView&lt;/i&gt; - скролл который будет анимированно двигаться, котда будем прикасаться к нему, на нем лежит две текстовые метки: &lt;i&gt;_onLabel&lt;/i&gt; и &lt;i&gt;_offLabel&lt;/i&gt; которые просто отображают текст и вьюшки с включенной и выключенной лампочками (&lt;i&gt;_ballImage0&lt;/i&gt; и &lt;i&gt;_ballImage1&lt;/i&gt;).
&lt;br /&gt;
&lt;br /&gt;
А вот и подобрались к самому главному, создаем слой маски из изображения и применяем его к вью:
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: c"&gt;  UIImage *_maskingImage = [UIImage imageNamed:@"butt_mask"];
  CALayer *_maskingLayer = [CALayer layer];
  _maskingLayer.frame = CGRectMake(1.0, 1.0, self.bounds.size.width-2.0, self.bounds.size.height-2.0);
  [_maskingLayer setContents:(id)[_maskingImage CGImage]];
  maskedView.layer.mask = _maskingLayer;

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Регистрируем слушателя на касание внутри нашей компоненты:
&lt;br /&gt;
&lt;br /&gt;
UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self
                        action:@selector(handleSingleTap:)];
  [self addGestureRecognizer:singleFingerTap];
  [singleFingerTap release];
&lt;br /&gt;
&lt;br /&gt;
и обработчик этого одиночного касания (до этого мы все делали в методе &lt;i&gt;init&lt;/i&gt;):
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: c"&gt;- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer
{
 [self setOn:!_on animated:YES];
}&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
так-же методы установки/получения состояния компоненты:
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: c"&gt;- (void)setOn:(BOOL)on animated:(BOOL)animated
{
 _on = on;
 _scrollingAnimation = animated;
 [_backgroundView setContentOffset:CGPointMake(on?0.0:_backgroundView.contentSize.width-self.bounds.size.width, 0.0) animated:animated];
 _ballImage0.alpha = _on?1.0f:.0f;
 _ballImage1.alpha = _on?.0f:1.0f;
}

- (void)setOn:(BOOL)on
{
 [self setOn:on animated:NO];
}

- (BOOL)on
{
 return _on;
}

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
тут в зависимости от состояния меняем прозрачность наших изображений &lt;i&gt;_ballImage0&lt;/i&gt; и &lt;i&gt;_ballImage1&lt;/i&gt; ну и храним состояние в переменной &lt;i&gt;_on&lt;/i&gt;
&lt;br /&gt;
&lt;br /&gt;
и обработчики перемещения UIScrollView пользователем:
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: c"&gt;- (void)scrollViewDidScroll:(UIScrollView *)sender
{
 CGFloat koof = sender.contentOffset.x/(sender.contentSize.width-sender.bounds.size.width);
 _ballImage0.alpha = 1.0f-koof;
 _ballImage1.alpha = koof;
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
 if (!_scrollingAnimation)
 {
  self.on = _backgroundView.contentOffset.x&amp;lt;1.0;
 }
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
 if (!decelerate &amp;amp;&amp;amp; !_scrollingAnimation)
 {
  self.on = _backgroundView.contentOffset.x&amp;lt;1.0;
 }
}&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Вот и все, проект можно посмотреть на &lt;a href="https://github.com/derand/custom_switcher"&gt;github&lt;/a&gt;-е, в нем специально закомментирована строка &lt;i&gt;_backgroundView.bounces = NO;&lt;/i&gt;, для более наглядной демонстрации эффекта.
&lt;br /&gt;
&lt;br /&gt;
ЗЫ: &lt;a href="http://www.cocoanetics.com/2011/08/adding-fading-gradients-to-uitableview/"&gt;Вот&lt;/a&gt; еще одно интересное применение маски.</description><link>http://blog.derand.net/2012/12/uiview.html</link><author>noreply@blogger.com (derand)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCnnoO-H9-8ujcAPrHwMaDD6wtBUtooKCTYXRlZp2aVPCwf7NQwh3Brv8zgJaMj-r7DdJHRis99lxbF3VKs4gyL47K4-dy7hv-XBBCcSPNSHlvC4755rVXvVTslYqtiT5r5sZvDZkYQ50/s72-c/butt_bg.png" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-4226716611457751065</guid><pubDate>Thu, 16 Aug 2012 18:40:00 +0000</pubDate><atom:updated>2012-10-28T23:14:23.320+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">hdiutil</category><category domain="http://www.blogger.com/atom/ns#">iso</category><category domain="http://www.blogger.com/atom/ns#">OS X</category><category domain="http://www.blogger.com/atom/ns#">terminal</category><title>Конвертирование образа dmg в iso в OS X</title><description>&lt;pre class="brush: shell"&gt;$ hdiutil convert file.dmg  -format UDTO -o &amp;lt;output iso file&amp;gt;
$ mv &amp;lt;output iso file&amp;gt;.cdr &amp;lt;output iso file&amp;gt; &lt;/pre&gt;</description><link>http://blog.derand.net/2012/08/dmg-iso-os-x.html</link><author>noreply@blogger.com (derand)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-1791207906982524912</guid><pubDate>Mon, 06 Aug 2012 20:27:00 +0000</pubDate><atom:updated>2012-10-28T23:47:20.644+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">*nix</category><category domain="http://www.blogger.com/atom/ns#">samba</category><category domain="http://www.blogger.com/atom/ns#">Ubuntu</category><title>Создание пользователя Samba в Ubuntu</title><description>Как-то в последнее время не получается писать сюда. Оправдываться не буду, потому-что в борьбе с ленью она пока одерживает верх. Но будут и еще битвы в которых я уж точно не проиграю.&lt;br /&gt;
&lt;br /&gt;
В данный момент заканчиваю приложение для конвертирования видео для iOS устройств под OS X и тут будет о чем написать.&lt;br /&gt;
&lt;br /&gt;
Но данная статья не о том, сегодня так случилось, что пришлось переустанавливать систему на "серверной" машине, а значит и поднимать с нуля множество сервисов. В том числе и демона самбы. И на просторах интернета нашел замечательную своей простотой &lt;a href="http://www.howtogeek.com/howto/ubuntu/create-a-samba-user-on-ubuntu/"&gt;статью&lt;/a&gt;&amp;nbsp;о том как добавлять пользователей. Я с настройкой самбы сталкиваюсь очень редко, раз в года 3-4, поэтому держать такую информацию в голове я считаю бессмысленно. Но припоминается, что в предыдущий раз я создавал реальных пользователей, а потом к ним привязывал пользователей самбы. Тут все проще, на одного реального пользователя можно "навесить" несколько пользователей самбы. И все делается очень просто.&lt;br /&gt;
&lt;br /&gt;
Создаем пользователя самбы и задаем ему пароль:
&lt;br /&gt;
&lt;pre class="brush: bash"&gt;$ sudo smbpasswd -a &amp;lt;sambausername&amp;gt;&lt;/pre&gt;
&lt;br /&gt;
Редактируем (или если нет - создаем) файл &lt;b&gt;/etc/samba/smbusers&lt;/b&gt;, который имеет вид&amp;nbsp;&amp;lt;ubuntuusername&amp;gt; = “&amp;lt;sambausername&amp;gt;”, т.е. задает соответствие пользователя самбы и пользователя системы.&lt;br /&gt;
&lt;br /&gt;
После всех манипуляций перегружаем демона самбы:
&lt;br /&gt;
&lt;pre class="brush: shell"&gt;$ sudo /etc/init.d/smbd restart&lt;/pre&gt;</description><link>http://blog.derand.net/2012/08/samba-ubuntu.html</link><author>noreply@blogger.com (derand)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-6223721585093013102</guid><pubDate>Tue, 06 Mar 2012 16:36:00 +0000</pubDate><atom:updated>2013-04-27T23:59:40.495+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">iOS</category><category domain="http://www.blogger.com/atom/ns#">Objective C</category><category domain="http://www.blogger.com/atom/ns#">UIWebView</category><title>Перехват двойного тапа у UIWebView</title><description>В классе, который будет обрабатывать двойной тап по &lt;a href="https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIWebView_Class/Reference/Reference.html"&gt;UIWebView&lt;/a&gt; регистрируем обработчик двойного тапа, если это UIViewController то, например, в методе viewDidLoad:&lt;br /&gt;
&lt;pre class="brush: c"&gt;- (void)viewDidLoad
{
    UITapGestureRecognizer *doubleFingerTap = [[UITapGestureRecognizer alloc]
                                                initWithTarget:self action:@selector(handleDoubleTapGesture:)];
    doubleFingerTap.numberOfTapsRequired = 2;
    doubleFingerTap.delegate = self;
    [self.webView addGestureRecognizer:doubleFingerTap];
    [doubleFingerTap release];
}&lt;/pre&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;pre class="brush: c"&gt;#pragma mark Gesture recognizer delegate

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{
    return YES;
}&lt;/pre&gt;
&lt;br /&gt;
так-же и сам метод, который будет вызываться при двойном тапе:&lt;br /&gt;
&lt;pre class="brush: c"&gt;- (void) handleDoubleTapGesture:(UITapGestureRecognizer *) gestureRecognizer
{
    if (gestureRecognizer.state == UIGestureRecognizerStateEnded)
 {
...
 }
}&lt;/pre&gt;
&lt;br /&gt;
Ну и на последок, в *.h-файл нашего класса, добавляем описание поддержки протокола&lt;br /&gt;
&lt;pre class="brush: c"&gt;&amp;lt;UIGestureRecognizerDelegate&amp;gt;&lt;/pre&gt;</description><link>http://blog.derand.net/2012/03/uiwebview.html</link><author>noreply@blogger.com (derand)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-3211684584153448103</guid><pubDate>Tue, 01 Nov 2011 13:27:00 +0000</pubDate><atom:updated>2012-10-28T23:46:56.560+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">mySQL</category><category domain="http://www.blogger.com/atom/ns#">terminal</category><title>Перенос базы MySQL c одного сервера на другой</title><description>Пост немного оффтоп, да и в поисковике довольно быстро решение ищется, но сегодня решил опубликовать, что было "под рукой". Допустим к каждому серверу есть доступ к консоли.&lt;br /&gt;
&lt;br /&gt;
На первом сервере делаем дамп базы &lt;br /&gt;
&lt;pre class="brush: shell"&gt;$ mysqldump -u[логин] -p[пароль] [базаданных] &amp;gt; mybase.sql&lt;/pre&gt;
&lt;br /&gt;
переписываем этот дамп на второй сервер, и делаем экспорт:&lt;br /&gt;
&lt;pre class="brush: shell"&gt;$ mysql -u[логин] -p[пароль] [базаданных] &amp;lt; mybase.sql&lt;/pre&gt;</description><link>http://blog.derand.net/2011/11/mysql-c.html</link><author>noreply@blogger.com (derand)</author><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-3953876657427487858</guid><pubDate>Sat, 01 Oct 2011 09:41:00 +0000</pubDate><atom:updated>2012-10-28T23:25:26.733+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">iOS</category><category domain="http://www.blogger.com/atom/ns#">Objective C</category><category domain="http://www.blogger.com/atom/ns#">UIGestureRecognizer</category><title>UIGestureRecognizer перехват одиночного касания и двойного на одном UIView</title><description>Для навешивания событий для одиночных и двойных касаний очень удобо использовать класс &lt;a href="http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIGestureRecognizer_Class/Reference/Reference.html"&gt;UIGestureRecognizer&lt;/a&gt;. Но если нужно перехватывать события которые пересекаются (например одиночное касание и двойное), то может возникнуть ситуация, что всегда будут выполнятся два перехваченных события (при двойном тапе будет всегда вызываться событие одиночного тапа).&lt;br /&gt;
&lt;br /&gt;
В этом случае нужно запретить в UIGestureRecognizer одиночного тапа посылку события при двойном тапе. Делается просто методом &lt;a href="http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIGestureRecognizer_Class/Reference/Reference.html"&gt;- (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;pre class="brush: c"&gt;        UIGestureRecognizer *doubleTapGestureRecognizer = [[UIGestureRecognizer alloc]
                                initWithTarget:self action:@selector(handleDoubleTap:)];
        doubleTapGestureRecognizer.numberOfTapsRequired = 2;
        [self addGestureRecognizer:doubleTapGestureRecognizer];

        UIGestureRecognizer *singleTapGestureRecognizer = [[UIGestureRecognizer alloc]
                                                              initWithTarget:self action:@selector(handleSingleTap:)];
        singleTapGestureRecognizer.numberOfTapsRequired = 1;
        [singleTapGestureRecognizer requireGestureRecognizerToFail:doubleTapGestureRecognizer];
        [self addGestureRecognizer:singleTapGestureRecognizer];&lt;/pre&gt;</description><link>http://blog.derand.net/2011/10/uigesturerecognizer-uiview.html</link><author>noreply@blogger.com (derand)</author><thr:total>5</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-6958218723050027539</guid><pubDate>Wed, 07 Sep 2011 21:13:00 +0000</pubDate><atom:updated>2011-09-09T11:33:43.042+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ARC</category><category domain="http://www.blogger.com/atom/ns#">Objective C</category><category domain="http://www.blogger.com/atom/ns#">xCode</category><title>Отключение ARC в xCode 4.2</title><description>Нужно всего лишь в качестве компилятора в свойствах проекта выбрать "&lt;span style="font-weight:bold;"&gt;LLVM GCC 4.2&lt;/span&gt;" вместо установленного по умолчанию "&lt;span style="font-weight:bold;"&gt;Apple LLVM compiler 3.0&lt;/span&gt;".&lt;br /&gt; &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8-j8FcmwOK_6uS3oBMDwZwMqWVHfNNgj938TgyMHh4_rDvpooMAB8d0xaTfuxxXv5q_OinXJw5z7C4SIHVFz9_X_mgIN7LWSCjqJJyciir0gX_-00myn3vXESEePVT3X2H-Gkz_ecweA/s1600/changeCompiler.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 232px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8-j8FcmwOK_6uS3oBMDwZwMqWVHfNNgj938TgyMHh4_rDvpooMAB8d0xaTfuxxXv5q_OinXJw5z7C4SIHVFz9_X_mgIN7LWSCjqJJyciir0gX_-00myn3vXESEePVT3X2H-Gkz_ecweA/s320/changeCompiler.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5649731255168736434" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;PS: По совету твиттер пользователя &lt;a href="http://twitter.com/#!/iLeNsTR"&gt;@iLeNsTR&lt;/a&gt; можно обойтись флагами компилятора:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcMS5rsf0CssmL0vgcVUYxXYwV6OyHrF2NyxDNnrKWgndkurFe-4DGxDbHYzs_m3kWR6fLiDhkNW1Kt2YQ5EmTe_wTITY-v8-i2SyW0oy1iyC692uvxEJYb8iv4UoZ0G5nFF-ndPs0XF0/s1600/2odc.Screen+shot+2011-09-08+at+01-40-23.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 278px; height: 93px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcMS5rsf0CssmL0vgcVUYxXYwV6OyHrF2NyxDNnrKWgndkurFe-4DGxDbHYzs_m3kWR6fLiDhkNW1Kt2YQ5EmTe_wTITY-v8-i2SyW0oy1iyC692uvxEJYb8iv4UoZ0G5nFF-ndPs0XF0/s320/2odc.Screen+shot+2011-09-08+at+01-40-23.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5650275042551440146" /&gt;&lt;/a&gt;</description><link>http://blog.derand.net/2011/09/arc-xcode-42.html</link><author>noreply@blogger.com (derand)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8-j8FcmwOK_6uS3oBMDwZwMqWVHfNNgj938TgyMHh4_rDvpooMAB8d0xaTfuxxXv5q_OinXJw5z7C4SIHVFz9_X_mgIN7LWSCjqJJyciir0gX_-00myn3vXESEePVT3X2H-Gkz_ecweA/s72-c/changeCompiler.png" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-5386851509186687963</guid><pubDate>Wed, 17 Aug 2011 16:18:00 +0000</pubDate><atom:updated>2012-10-28T23:48:09.566+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">terminal</category><title>Обработка файлов: групповая замена</title><description>Довольно часто поражаюсь, как все в консоли бывает просто реализовать. Вот сегодня мне понадобилось обработать довольно много html, и заменить в них символ "®" на его html-код "&amp;amp;amp#174;", внезапно консоль пришла на помощь):
&lt;pre class="brush: shell"&gt;$ (find . -name *html) | xargs sed -i "s/®/\&amp;amp#174;/g"&lt;/pre&gt;
</description><link>http://blog.derand.net/2011/08/blog-post.html</link><author>noreply@blogger.com (derand)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-8251439063346406113</guid><pubDate>Tue, 26 Jul 2011 13:23:00 +0000</pubDate><atom:updated>2012-10-28T23:26:59.544+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">hdiutil</category><category domain="http://www.blogger.com/atom/ns#">iso</category><category domain="http://www.blogger.com/atom/ns#">OS X</category><category domain="http://www.blogger.com/atom/ns#">terminal</category><title>Создание iso образа из папки в OS X</title><description>&lt;pre class="brush: shell"&gt;$ hdiutil makehybrid -iso -joliet -o &amp;lt;output file&amp;gt; &amp;lt;folder with files&amp;gt;/&lt;/pre&gt;</description><link>http://blog.derand.net/2011/07/iso-os-x.html</link><author>noreply@blogger.com (derand)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-4736815006273260068</guid><pubDate>Thu, 14 Jul 2011 15:27:00 +0000</pubDate><atom:updated>2012-10-28T23:28:13.902+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">OS X</category><category domain="http://www.blogger.com/atom/ns#">terminal</category><title>Конвертирование plist в бинарный формат (bplist) и обратно в текстовый</title><description>Да, мне кажется, что задача бессмысленна, так как методы чтения plist-ов ([&lt;a href="http://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/Reference/Reference.html#//apple_ref/occ/clm/NSDictionary/dictionaryWithContentsOfFile:"&gt;NSDictionary dictionaryWithContentsOfFile:(NSString *)path&lt;/a&gt;]) одинаково хорошо понимают, что plist в бинарном формате, что в текстовом. Но все  ж возникла задача отдать на редактирование plist третьей стороне для редактирования в текстовом редакторе, а для этого пришлось сконвертировать plist в текстовый формат. Итак, в терминале выполняем команду:&lt;br /&gt;
&lt;pre class="brush: shell"&gt;$ plutil -convert xml1 ./myBinaryPlist.plist &lt;/pre&gt;
и назад из текстового в бинарный:&lt;br /&gt;
&lt;pre class="brush: shell"&gt;$ plutil -convert binary1 ./myTextPlist.plist &lt;/pre&gt;</description><link>http://blog.derand.net/2011/07/plist-bplist.html</link><author>noreply@blogger.com (derand)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-3698988640173365066</guid><pubDate>Tue, 12 Jul 2011 12:43:00 +0000</pubDate><atom:updated>2012-10-28T23:28:43.470+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">bash</category><category domain="http://www.blogger.com/atom/ns#">svn</category><category domain="http://www.blogger.com/atom/ns#">terminal</category><title>Удаление .svn файлов/папок</title><description>Не открытие конечно, но может так быстрее запомню.&lt;br /&gt;&lt;pre class="brush: shell"&gt;$ find ./ -name ".svn" | xargs rm -Rf&lt;/pre&gt;</description><link>http://blog.derand.net/2011/07/svn.html</link><author>noreply@blogger.com (derand)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-6525364110788307352</guid><pubDate>Mon, 04 Jul 2011 10:36:00 +0000</pubDate><atom:updated>2012-10-28T23:29:40.266+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">DS_Store</category><category domain="http://www.blogger.com/atom/ns#">Mac OS</category><title>Отключение создания .DS_Store на сетевых ресурсах</title><description>&lt;pre class="brush: shell"&gt;$ defaults write com.apple.desktopservices DSDontWriteNetworkStores true&lt;/pre&gt;</description><link>http://blog.derand.net/2011/07/dsstore.html</link><author>noreply@blogger.com (derand)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-4293895385706475397</guid><pubDate>Fri, 17 Jun 2011 07:46:00 +0000</pubDate><atom:updated>2012-10-28T23:30:24.799+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">iOS</category><category domain="http://www.blogger.com/atom/ns#">Objective C</category><category domain="http://www.blogger.com/atom/ns#">простые вещи</category><title>Запрет лока экрана при запущенном приложении в iOS</title><description>&lt;pre class="brush: c"&gt;[UIApplication sharedApplication].idleTimerDisabled = YES;&lt;/pre&gt;</description><link>http://blog.derand.net/2011/06/ios_17.html</link><author>noreply@blogger.com (derand)</author><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-1614487075023160983</guid><pubDate>Fri, 17 Jun 2011 07:38:00 +0000</pubDate><atom:updated>2011-06-17T10:46:23.960+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">iOS</category><category domain="http://www.blogger.com/atom/ns#">Objective C</category><category domain="http://www.blogger.com/atom/ns#">простые вещи</category><title>Рисование под статус баром в iOS</title><description>Полезно иногда просматривать официальную документацию.&lt;br /&gt;&lt;br /&gt;В моем приложении, так-же как и в стандартном Photos необходимо убирать статус бар при тапе на экран, но так, что б вью на экране не "прыгало". Думал уже реализовывать кастомным вью и непосредственно добавлять его на &lt;a href="http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIWindow_Class/UIWindowClassReference/UIWindowClassReference.html"&gt;UIWindow&lt;/a&gt;, но нашел замечательное свойство &lt;a href="http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/wantsFullScreenLayout"&gt;wantsFullScreenLayout&lt;/a&gt; у &lt;a href="http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html"&gt;UIViewController&lt;/a&gt;, которое все проблеммы решило.</description><link>http://blog.derand.net/2011/06/ios.html</link><author>noreply@blogger.com (derand)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-7269733295872124145</guid><pubDate>Mon, 09 May 2011 03:32:00 +0000</pubDate><atom:updated>2012-10-28T23:31:33.187+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Objective C</category><category domain="http://www.blogger.com/atom/ns#">UILabel</category><title>Размытый текст в UILabel</title><description>Я не привык пользоваться Interface Builder в xCode. Все компоненты создаю динамически и для меня это вполне удобно. И вот недавно столкнулся с проблемой отображения текста в компоненте &lt;a href="http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UILabel_Class/Reference/UILabel.html"&gt;UILabel&lt;/a&gt;, а поскольку это "корневая" компонента входящая в такие компоненты как &lt;a href="http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIButton_Class/UIButton/UIButton.html"&gt;UIButton&lt;/a&gt; и &lt;a href="http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UITableViewCell_Class/Reference/Reference.html"&gt;UITableViewCell&lt;/a&gt;, то проблема оказалась серьезной.&lt;br /&gt;
&lt;br /&gt;
Итак, на скриншоте ниже отображены UILabel с одним шрифтом и одним и тем-же размером.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_uDEHZIftZjImpr3lkfeUMuB1yH92Va0Jx7FX2vVYWI7Bfbp4XTJUXzRPNEHuvmXdldsU0D56pLn3wdV2sR6ZjD7hotLWxAvxArWtLso1LBx8MGdDrIMPlnk8SMEmGny0TCw2RRp63Hw/s1600/Screen+shot+2011-05-09+at+6.30.40+AM.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5604556316442997058" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_uDEHZIftZjImpr3lkfeUMuB1yH92Va0Jx7FX2vVYWI7Bfbp4XTJUXzRPNEHuvmXdldsU0D56pLn3wdV2sR6ZjD7hotLWxAvxArWtLso1LBx8MGdDrIMPlnk8SMEmGny0TCw2RRp63Hw/s320/Screen+shot+2011-05-09+at+6.30.40+AM.png" style="cursor: hand; cursor: pointer; height: 220px; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Вторая метка выглядит размытой. Вот код, которым я создавал эти UILabel.&lt;br /&gt;
&lt;pre class="brush: c"&gt;- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    
 CGRect screenRect = [[UIScreen mainScreen] applicationFrame];
    
    UILabel *normal = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 30.0, screenRect.size.width, 50.0)];
    normal.text = @&amp;quot;Test label1&amp;quot;;
    normal.textAlignment = UITextAlignmentCenter;
    normal.font = [UIFont systemFontOfSize:16.0];
    normal.backgroundColor = [UIColor clearColor];
    [self.window addSubview:normal];
    [normal release];
    
    
    UILabel *fuzzy = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 60.55, screenRect.size.width, 50.0)];
    fuzzy.text = @&amp;quot;Test label2&amp;quot;;
    fuzzy.textAlignment = UITextAlignmentCenter;
    fuzzy.font = [UIFont systemFontOfSize:16.0];
    fuzzy.backgroundColor = [UIColor clearColor];
    [self.window addSubview:fuzzy];
    [fuzzy release];
    
    
    [self.window makeKeyAndVisible];
    return YES;
}&lt;/pre&gt;
Решилось все просто, оказывается UILabel не дружит с нецелыми координатами (&lt;span style="font-style: italic;"&gt;60.5 - в CGRectMake(0.0, 60.5, screenRect.size.width, 50.0)&lt;/span&gt;)</description><link>http://blog.derand.net/2011/05/uilabel.html</link><author>noreply@blogger.com (derand)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_uDEHZIftZjImpr3lkfeUMuB1yH92Va0Jx7FX2vVYWI7Bfbp4XTJUXzRPNEHuvmXdldsU0D56pLn3wdV2sR6ZjD7hotLWxAvxArWtLso1LBx8MGdDrIMPlnk8SMEmGny0TCw2RRp63Hw/s72-c/Screen+shot+2011-05-09+at+6.30.40+AM.png" width="72"/><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-9065672633541606446</guid><pubDate>Tue, 03 May 2011 14:48:00 +0000</pubDate><atom:updated>2012-10-28T23:32:47.194+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Mac OS</category><category domain="http://www.blogger.com/atom/ns#">Safari</category><title>Отключение подтверждения закрытия вкладок Safari</title><description>Сегодня окончательно достало вплывающее окно подтверждения закрытия вкладки в Сафари при заполненной форме на странице (поиск гугла, гугл переводчик). На просторах рунета быстро нашлось решение - &lt;a href="http://mac-pig.blogspot.com/2011/02/safari-close-tab-confirm.html"&gt;"Отключение подтверждения закрытия вкладок Safari"&lt;/a&gt;, за что автору спасибо.&lt;br /&gt;
&lt;br /&gt;
Продублирую здесь код, так как страницы имеют свойство умирать.&lt;br /&gt;
&lt;pre class="brush: bash"&gt;$ /usr/bin/defaults write com.apple.Safari DebugConfirmTossingUnsubmittedFormText -boolean No&lt;/pre&gt;
За более подробным описанием смотрите &lt;a href="http://mac-pig.blogspot.com/2011/02/safari-close-tab-confirm.html"&gt;первоисточник&lt;/a&gt;.</description><link>http://blog.derand.net/2011/05/safari.html</link><author>noreply@blogger.com (derand)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-7335365733633804289</guid><pubDate>Sun, 01 May 2011 11:42:00 +0000</pubDate><atom:updated>2011-05-01T14:49:30.751+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Mac OS</category><category domain="http://www.blogger.com/atom/ns#">system preference</category><title>Удаление ярыка "Macintosh HD" с рабочего стола в MacOS</title><description>Удаляется просто, пост для того, что б в интернетах долго не искать.&lt;br /&gt;&lt;br /&gt;В настройках Finder снимаем галочку с "Show these items on desctop"-&gt;"Hard disks":&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD00r_aVzpQuNBgV3lYfb7CFqYskC1beh7woXJUfmxHAUWkqWMn1vG_bp2hWQEVwKRRr6juCYiQy0jKn9SICITuzIgI2Wy7TF05Pe3Jp_uZe2VCYTzffdEg4n81Seb5O6BSZcECv4tCHw/s1600/Screen+shot+2011-05-01+at+2.42.34+PM.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 264px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD00r_aVzpQuNBgV3lYfb7CFqYskC1beh7woXJUfmxHAUWkqWMn1vG_bp2hWQEVwKRRr6juCYiQy0jKn9SICITuzIgI2Wy7TF05Pe3Jp_uZe2VCYTzffdEg4n81Seb5O6BSZcECv4tCHw/s320/Screen+shot+2011-05-01+at+2.42.34+PM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5601713139624871890" /&gt;&lt;/a&gt;</description><link>http://blog.derand.net/2011/05/macintosh-hd-macos.html</link><author>noreply@blogger.com (derand)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD00r_aVzpQuNBgV3lYfb7CFqYskC1beh7woXJUfmxHAUWkqWMn1vG_bp2hWQEVwKRRr6juCYiQy0jKn9SICITuzIgI2Wy7TF05Pe3Jp_uZe2VCYTzffdEg4n81Seb5O6BSZcECv4tCHw/s72-c/Screen+shot+2011-05-01+at+2.42.34+PM.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-3934989134741991017</guid><pubDate>Sat, 23 Apr 2011 18:44:00 +0000</pubDate><atom:updated>2012-10-28T23:33:43.439+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">iOS</category><category domain="http://www.blogger.com/atom/ns#">Objective C</category><category domain="http://www.blogger.com/atom/ns#">UIWebView</category><category domain="http://www.blogger.com/atom/ns#">web</category><title>Куки в iOS (UIWebView)</title><description>Для каждого приложения в iOS существует свое хранилище http-cookies. Класс, который отвечает за куки - &lt;a href="http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSHTTPCookieStorage_Class/Reference/Reference.html"&gt;NSHTTPCookieStorage&lt;/a&gt;. Класс имеет простой интерфейс доступа к кукам, например прочитать все куки можно так:&lt;br /&gt;
&lt;pre class="brush: c"&gt;for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies])
{
NSLog(@&amp;quot;%@&amp;quot;, cookie);
}&lt;/pre&gt;
Так-же есть методы утановки куков (&lt;a href="http://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSHTTPCookieStorage_Class/Reference/Reference.html#//apple_ref/occ/instm/NSHTTPCookieStorage/setCookie:"&gt;- setCookie:&lt;/a&gt;), и чтения для конкретного урла (&lt;a href="http://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSHTTPCookieStorage_Class/Reference/Reference.html#//apple_ref/occ/instm/NSHTTPCookieStorage/cookiesForURL:"&gt;– cookiesForURL:&lt;/a&gt;)</description><link>http://blog.derand.net/2011/04/ios-uiwebview.html</link><author>noreply@blogger.com (derand)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-5039919384930980573</guid><pubDate>Tue, 19 Apr 2011 13:16:00 +0000</pubDate><atom:updated>2012-10-28T23:34:36.709+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">iOS</category><category domain="http://www.blogger.com/atom/ns#">Objective C</category><title>Скрытие статус бара в iOS</title><description>Статус бар - верхняя панелька в iOS со значком оператора, часами и зарядом батареи.&lt;br /&gt;
&lt;br /&gt;
Программно можно скрыть статус бар так:
&lt;br /&gt;
&lt;pre class="brush: c"&gt;[[UIApplication sharedApplication] setStatusBarHidden:YES];&lt;/pre&gt;
Можно так-же отредактировав Info.plist приложения, добавив ключ &lt;span style="font-weight: bold;"&gt;UIStatusBarHidden&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5Aj8GxaFPNHY5-9VK9MgtlGEljNLu3sMxwS0MQBYU-bgZw1JTtmwYmdPjai9j422wIxUnHFpm3LX13upkVj_Hr1vGYa4dJoaAmFstdrzq7AIy3-msoZP3Do-wLZLyiwG4l3B3rhQwSJk/s1600/Screen+shot+2011-04-19+at+4.11.56+PM.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5597284028697689586" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5Aj8GxaFPNHY5-9VK9MgtlGEljNLu3sMxwS0MQBYU-bgZw1JTtmwYmdPjai9j422wIxUnHFpm3LX13upkVj_Hr1vGYa4dJoaAmFstdrzq7AIy3-msoZP3Do-wLZLyiwG4l3B3rhQwSJk/s320/Screen+shot+2011-04-19+at+4.11.56+PM.png" style="cursor: hand; cursor: pointer; height: 164px; width: 320px;" /&gt;&lt;/a&gt;</description><link>http://blog.derand.net/2011/04/ios.html</link><author>noreply@blogger.com (derand)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5Aj8GxaFPNHY5-9VK9MgtlGEljNLu3sMxwS0MQBYU-bgZw1JTtmwYmdPjai9j422wIxUnHFpm3LX13upkVj_Hr1vGYa4dJoaAmFstdrzq7AIy3-msoZP3Do-wLZLyiwG4l3B3rhQwSJk/s72-c/Screen+shot+2011-04-19+at+4.11.56+PM.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-2119642021298370547</guid><pubDate>Fri, 08 Apr 2011 13:45:00 +0000</pubDate><atom:updated>2012-10-28T23:35:44.175+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">deprecated</category><category domain="http://www.blogger.com/atom/ns#">Objective C</category><title>Отметка функций и свойств аттрибутом "запрещен"</title><description>Для свойств&lt;br /&gt;
&lt;pre class="brush: c"&gt;@property&amp;nbsp;(nonatomic, assign)&amp;nbsp;CGRect closeButtonPosition __attribute__&amp;nbsp;((deprecated));&lt;/pre&gt;
И для методов&lt;br /&gt;
&lt;pre class="brush: c"&gt;- (id) initWithText:(NSString *) text __attribute__ ((deprecated));&lt;/pre&gt;</description><link>http://blog.derand.net/2011/04/blog-post.html</link><author>noreply@blogger.com (derand)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-3163718420901035449</guid><pubDate>Mon, 04 Apr 2011 13:15:00 +0000</pubDate><atom:updated>2012-10-28T23:39:13.349+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">terminal</category><category domain="http://www.blogger.com/atom/ns#">xCode</category><category domain="http://www.blogger.com/atom/ns#">xcodebuild</category><title>xcodebuild сборка приложения в консоли</title><description>Давно не писал в блог, времени катастрофически не хватало, впредь обещаю исправится.)&lt;br /&gt;
&lt;br /&gt;
А для начала небольшой пост, о том, как можно сделать билд приложения в консоли.&lt;br /&gt;
Утилита xcodebuild из комплекта xCode SDK именно для этого. Хотя наверняка даже наоборот xcode IDE - графическая обертка над xcodebuild. Я &lt;br /&gt;
&lt;br /&gt;
xcodebuild работает с проектом в текущей папке. Рассмотрим несколько основных параметров утилиты.&lt;br /&gt;
Запускается так:&lt;br /&gt;
&lt;pre class="brush: bash"&gt;$ xcodebuild [-project &amp;lt;projectname&amp;gt;] [-activetarget] [-alltargets] [-target&amp;lt;targetname&amp;gt;]... [-parallelizeTargets] [-activeconfiguration] [-configuration&amp;lt;configurationname&amp;gt;] [-sdk &amp;lt;sdkfullpath&amp;gt;|&amp;lt;sdkname&amp;gt;] [-xcconfig &amp;lt;filepath&amp;gt;][&amp;lt;buildsetting&amp;gt;=&amp;lt;value&amp;gt;]... [&amp;lt;buildaction&amp;gt;]...&lt;/pre&gt;
из испольуемых мной параметров:&lt;br /&gt;
&lt;br /&gt;
-&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;target&lt;/span&gt;&lt;/span&gt; - задает имя таргета, который собирать в приложении&lt;br /&gt;
-&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;configuration&lt;/span&gt;&lt;/span&gt; - задает конфигурацию, которую собирать&lt;br /&gt;
-&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;sdk&lt;/span&gt;&lt;/span&gt; - и SDK который использовать при сборке&lt;br /&gt;
-&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;list&lt;/span&gt;&lt;/span&gt; - показывает список таргетов и конфигураций для проектов в текущей папке&lt;br /&gt;
-&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;showsdks&lt;/span&gt;&lt;/span&gt; - показывает доступные SDK&lt;br /&gt;
&lt;br /&gt;
более детально можно узнать из мануалов:&lt;br /&gt;
&lt;pre class="brush: bash"&gt;$ man xcodebuild&lt;/pre&gt;
В качестве "бонуса" приведу пример баш скрипта, который собирает приложение с конфигурацией "Distribution" и создает *.ipa файл. Подразумевается, что конфигурация  "Distribution" настроена на подписку приложения сертификатом Ad-Hoc. Скрипт не проверяет ошибки вывода комманд, да и написался он быстрее чем этот пост:&lt;br /&gt;
&lt;pre class="brush: bash"&gt;#!/bin/sh
cd ~/work/my_project/trunk/my_project
rm -fr ./build
xcodebuild -target my_project -configuration Distribution -sdk iphoneos4.3
rm -fr ../tmp
mkdir ../tmp
mkdir ../tmp/Payload
cp -r ./build/Distribution-iphoneos/my_project.app ../tmp/Payload/
cp ./Resources/icon\@2x.png ../tmp/iTunesArtwork
cd ../tmp/
zip -r7 my_project.zip ./iTunesArtwork ./Payload
mv ./my_project.zip ../my_project.ipa
cd ..
rm -fr ./tmp

cp ./my_project.ipa ~/Desktop&lt;/pre&gt;</description><link>http://blog.derand.net/2011/04/xcodebuild.html</link><author>noreply@blogger.com (derand)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-756832270391248479.post-1487421362262218851</guid><pubDate>Wed, 23 Feb 2011 16:53:00 +0000</pubDate><atom:updated>2012-10-28T23:45:20.858+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">localization</category><category domain="http://www.blogger.com/atom/ns#">xCode</category><title>Ошибка xCode Command .../copystrings failed with exit code 1</title><description>При сборке билда iPhone приложения xCode сегодня выдал ошибку:&lt;br /&gt;
&lt;pre class="brush: plain"&gt;Command /Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin
/Contents/Resources/copystrings failed with exitcode 1&lt;/pre&gt;
Решилась довольно просто, в фале "&lt;span style="font-weight: bold;"&gt;Localizable.strings&lt;/span&gt;" забыл в конце строки проставить "&lt;span style="font-weight: bold;"&gt;;&lt;/span&gt;"</description><link>http://blog.derand.net/2011/02/xcode-command-copystrings-failed-with.html</link><author>noreply@blogger.com (derand)</author><thr:total>1</thr:total></item></channel></rss>