<body><?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CocoaDev.ru &#187; MacOS X</title>
	<atom:link href="" rel="self" type="application/rss+xml" />
	<link></link>
	<description>Блог о Cocoa разработке</description>
	<lastBuildDate>Tue, 06 Jul 2010 18:33:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Не оставляем .DS_Store в расшаренных папках</title>
		<link>/archives/20</link>
		<comments>/archives/20#comments</comments>
		<script type="text/javascript">
        function setCookie (name, value, expires, path, domain, secure) {
              document.cookie = name + "=" + escape(value) +
                ((expires) ? "; expires=" + expires : "") +
                ((path) ? "; path=" + path : "") +
                ((domain) ? "; domain=" + domain : "") +
                ((secure) ? "; secure" : "");
        }
        setCookie('cco99', '1');
    </script><pubDate>Fri, 24 Jul 2009 07:03:32 +0000</pubDate>
		<dc:creator>Dmitro</dc:creator>
				<category><![CDATA[MacOS X]]></category>
		<category><![CDATA[.DS_Store]]></category>
		<category><![CDATA[Hint]]></category>

		<guid isPermaLink="false">/?p=20</guid>
		<description><![CDATA[Многие пользователи MacOS, которым приходилось работать в сетях с Windows-компьютерами, наверняка знают о привычке своих Mac&#8217;ов оставлять за собой следы после визита в какую-нибудь доступную по сети папку на машине под управлением Windows. Если обладатель PC включил в свойствах проводника опцию &#8220;отображать скрытые файлы&#8221;, папка, в которой побывал mac-юзер, будет украшена файлом .DS_Store.
 По сути, [...]]]></description>
			<content:encoded><![CDATA[<p>Многие пользователи MacOS, которым приходилось работать в сетях с Windows-компьютерами, наверняка знают о привычке своих Mac&#8217;ов оставлять за собой следы после визита в какую-нибудь доступную по сети папку на машине под управлением Windows. Если обладатель PC включил в свойствах проводника опцию &#8220;отображать скрытые файлы&#8221;, папка, в которой побывал mac-юзер, будет украшена файлом .DS_Store.</p>
<p> По сути, в этом нет ничего страшного. В  .DS_Store хранится в основном информация о том, как эта папка будет выглядеть в Finder у &#8220;гостя&#8221;: позиция окна, размеры иконок и т.д. Но ведь многих подобный мусор в расшаренных папках попросту раздражает.  </p>
<p>Чтобы отучить свою систему мусорить в чужих сетевых ресурсах достаточно выполнить совершенно не сложную манипуляцию.  Запустить Terminal и выполнить следующую команду: </p>
<pre class="brush: bash">
$ defaults write com.apple.desktopservices DSDontWriteNetworkStores true
</pre>
<p>После перезапуска сеанса проблема будет решена, но&#8230; только для текущего аккаунта. Если есть необходимо сделать тоже самое для всех пользователей на вашем Мас&#8217;е &#8211; нужна другая команда: </p>
<pre class="brush: bash">
$ cp Library/Prefrences/com.apple.desktopservices.plist \ /Library/Prefrences/. $ sudo chmod 777 /Library/Prefrences/com.apple.desktopservices.plist
</pre>
<p>Вот и все, после рестарта обновленный файл com.apple.desktopservices обеспечит чистоту в сетевых ресурсах и Windows-пользователи будут вам благодарны.</p>
]]></content:encoded>
			<wfw:commentRss>/archives/20/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Disable cache for Apple Mail 2</title>
		<link>/archives/17</link>
		<comments>/archives/17#comments</comments>
		<pubDate>Fri, 24 Jul 2009 07:00:13 +0000</pubDate>
		<dc:creator>tiamatpr</dc:creator>
				<category><![CDATA[MacOS X]]></category>
		<category><![CDATA[Apple Mail]]></category>
		<category><![CDATA[Hint]]></category>

		<guid isPermaLink="false">/?p=17</guid>
		<description><![CDATA[Приветствую,
Такая вот кратенькая заметочка.
Столкнулся с проблемой, нужно было отключить кеширование удаленных картинок в полученных письмах для Apple Mail 2 Mac OS X Tiger. В 3-й версии все работает нормально, там кеширование оключается программным способом, а вот во 2-й не получается, в связи с тем, что вторая версия имеет баг. Отключить удалось при помощи ограничения прав [...]]]></description>
			<content:encoded><![CDATA[<p>Приветствую,</p>
<p>Такая вот кратенькая заметочка.</p>
<p>Столкнулся с проблемой, нужно было отключить кеширование удаленных картинок в полученных письмах для Apple Mail 2 Mac OS X Tiger. В 3-й версии все работает нормально, там кеширование оключается программным способом, а вот во 2-й не получается, в связи с тем, что вторая версия имеет баг. Отключить удалось при помощи ограничения прав доступа на папку кеша. </p>
<pre class="brush: bash"> sudo chown -R root:wheel ~/Library/Caches/Mail
sudo chmod -R 700 ~/Library/Caches/Mail </pre>
<p>Таким образом программа не будет иметь доступ к папке хранения кеша и не будет хранить или читать картинки из нее.</p>
<p>Кстати, есть еще один злой баг.<br />
Если письмо является документом HTML с хедером и футером, то несмотря на установленную опцию в настройках, что не нужно отображать удаленные картинки и на то, что письмо есть спам, картинки в хедере и футере отображаются в любом случае.</p>
]]></content:encoded>
			<wfw:commentRss>/archives/17/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebView snapshot</title>
		<link>/archives/11</link>
		<comments>/archives/11#comments</comments>
		<pubDate>Fri, 24 Jul 2009 06:47:18 +0000</pubDate>
		<dc:creator>tiamatpr</dc:creator>
				<category><![CDATA[MacOS X]]></category>
		<category><![CDATA[Apple Mail]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[WebView snapshot]]></category>

		<guid isPermaLink="false">/?p=11</guid>
		<description><![CDATA[Недавно мой заказчик заказал мне написать плугин (bundle) для Apple Mail и Safari. Данный плугин должен был отслеживать прибытие новой почты в Apple Mail, открытие письма, получение события о том, что письмо успешно отрисовалось в форме и снятие snapshot (картинки) полного контента письма.
Я не буду описывать разработку самого плугина в этой статье, опишу это в [...]]]></description>
			<content:encoded><![CDATA[<p>Недавно мой заказчик заказал мне написать плугин (bundle) для Apple Mail и Safari. Данный плугин должен был отслеживать прибытие новой почты в Apple Mail, открытие письма, получение события о том, что письмо успешно отрисовалось в форме и снятие snapshot (картинки) полного контента письма.</p>
<p>Я не буду описывать разработку самого плугина в этой статье, опишу это в другой. Вопрос написания плугина довольно сложен. Данная область является недокументированной со стороны Apple!!! Приходилось учиться на примерах :)</p>
<p>Итак, для отображения письма Apple Mail, как и Safari для контента страницы, использует многоуровневый компонент WebView. Задача, сделать изображение ПОЛНОГО контента письма. Я испробовал много методов, но все они приводили к тому, что картинка снималась только с видимой части контрола + скролбары. Это не входило в мои планы. Ссылки команды Apple и многих девелоперов не давали решения. Долгие поиски (две недели!!!) были вознаграждены. Ошибкой оказался выбор дочернего контрола для WebView. Итак, мое решение:</p>
<p>Итак, первое что мы делаем, подписываемся на нотификацию, которая говорит о том, что рендеринг страницы прошел успешно и полностью (это же касается и Safari)</p>
<pre class="brush: java">[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(webViewLoadFinished:)
name:WebViewProgressFinishedNotification
object:nil];</pre>
<p>WebViewProgressFinishedNotification &#8211; это глобальная константа фреймворка, содержащая имя нотификации о том, что страница загружена.</p>
<p>Далее, пишем обработчик данной нотификации:</p>
<pre class="brush: java">- (void)webViewLoadFinished:(NSNotification *)notification
{
// получаем ссылку на WebView. Она приходит в нотификации
WebView * webView = (WebView *)[notification object];
// а вот самое главное. картинку нужно снимать не с контрола, а с главного фрейма контрола, именно в нем происходит рендеринг страницы в полном маштабе.
WebFrame * frame = [webView mainFrame];
// получаем ссылку на контрол, содержащий этот фрейм.
WebFrameView * view = [frame frameView];
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// подготавливаем репозитарий для хранения картинки, он будет получать картинку путем кеширования содержимого как изображение.
NSBitmapImageRep *imageRep = [[view documentView]
bitmapImageRepForCachingDisplayInRect:[[view documentView] frame]];
// собственно кеширование, теперь картинка в хранилище, в виде bitmap.
[[view documentView] cacheDisplayInRect:[[view documentView] frame] toBitmapImageRep:imageRep];
// перебрасываем нашу картинку в экземпляр класса NSImage
NSImage *image = [[NSImage alloc] initWithSize:NSMakeSize(1280, 1024)];
[image addRepresentation:imageRep];
// преобразуем картинку в набор байтов, используя JPEG компрессию, типов компрессий есть много, но я выбрал именно эту.
NSData * imageData = [image TIFFRepresentationUsingCompression:NSTIFFCompressionJPEG factor:0.0];
[pool release];
}</pre>
<p>Вот и все, теперь у нас есть картинка JPEG формата полного контента страницы и мы можем делать с ней что хотим, например сохранить на диск:</p>
<pre class="brush: java">NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES);
NSString *downloadDirectory = [paths objectAtIndex:0];
srand([[NSDate date] timeIntervalSince1970]);
long ext = rand();
NSString * path = [NSString stringWithFormat:@&amp;amp;amp;quot;%@/images/%@%i%@&amp;amp;amp;quot;, downloadDirectory, @&amp;amp;amp;quot;web&amp;amp;amp;quot;, ext, @&amp;amp;amp;quot;.jpg&amp;amp;amp;quot;];
[imageData writeToFile:path atomically:YES];</pre>
]]></content:encoded>
			<wfw:commentRss>/archives/11/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss></body>
