div.aae_field" display: none; visibility: hidden; } div.a849e_field" display: none; visibility: hidden; } MacTech�= The journal of Apple technology.<z薸tle> <link type="textuss" rel="stylesheet" media="all" href="http:]錭dn.mactech.com/sites/default/files/advagg_cssuss_7a90󳲈󤕘00蒮3efSA�(N�)b776dffd0a49d3968_�(懷�)css"� > <script type="textv產vascript" src="http:/t鎗ax.googleapis.comt鎗ax/libsv畄uery/1.�(懷�)6/jquery.min.js"><ztcript> <script�4ype="text/javascript" src="http:]錫jax.googleapis.com/ajaxv頸bs/jqueryui].6v畄uery-ui.min.js"><ztcript> <script�4ype="text/javascript" src="http:]錭dn.mactech.com/sites/default/files/advagg_js/js_da2abc6s7dc30󤕬000e2a7f746ffq1.js"></script> <script type="textv產vascript"> <!--]--><�1 D�8CDATA[]><�c- jQuery.extend(Drupal.settings,""basePath":"\/"+"+"googleanalytics":{"trackOutbound":1,"trackMailto":1,"trackDownload":1,"trackDownloadExtensions":"7z|aac|arc|arj|asf|asx|avi|bin|csv|doc|exe|flv|gif|gz|gzip|hqx|jar|jpe?g|js|mp(2|3|4|e?g)|mov(ie)?|msi|msp|pdf|phps|png|ppt|qtm?|ra(m|r)?|sea|sit|tar|tgz|torrent|txt|wav|wma|wmv|wpd|xls|xml|z|zip"},"nice_menus_options":{"delay":800,"speed":2}); ]--><�5 D�8]> <ztcript> <script�4ype="text/javascript"> <�c-/\q-><![cdata[/b6<!-- window.google_analytics_uacct = "UA-763-5"; /\q-><!]]> </script> <script type="textv產vascript"> <!--]--><�1 D�8CDATA[]><�c- Drupal.behaviors.a8ee372�(y]�)�1�2p筨2fdeb7d = function() { $("input.aae_field").each(function()" f=$(this)[0]; if (f.value.indexOf("eb7db2fd")==0){f.value="e8"+f.value.substring(4)+"d6c3a4b547�(T �)5c6_form";} }); }; /\q-><!]]> </script> <script type="textv產vascript"> <!--]--><�1 D�8CDATA[]><�c- Drupal.behaviors.a8ee372�(y]�)�1�2p6488104a = function() { $("input.a849e_field").each(function()" f=$(this)[0]; �4ok�(N��)= f.style.fontFamily; if(tok�(懷�)charAt(0) == "'"�=| tok2.charAt(0) == '"')�4ok�(O�)tok2.substring(1, tok2.length-1); tok2=tok�(懷�)substring(1,�4ok�(懷�)length); if (f.value.indexOf("104af648810")==0){f.value="ea"+f.value.substring(5)+tok2;} �(); }; ]--><�5 D�8]> <ztcript> <!--[if IE 5 5]> �!�!link rel="stylesheet" type="textuss" href="css/ie6.css"� > <![endif]--> <script type="textv產vascript"><�c- google_ad_client = "pub-0󤕬0620400777200"; /* 0x600, created 1�(W�)00砞9 */ google_ad_slot = "50052595"; google_ad_width = 0󡓔; google_ad_height = �(ry�)0; /\q-> <ztcript> </head> <body class="not-front not-logged-in page-articles one-sidebar sidebar-left"> <�c-[if !IE]>Start Header<![endif]--> <div id="header"><!--[if �jE]>Start Top Menu<�1 D�8endif]--> <div class="top_row_menu"> <ul> <li><strong>MacTech Network:�!�!zttrong></li> <li><a href=".".support">Tech Support<t><v頸> �!�!li>|</li> <li><a href="http:]鍂ww.macforge.net">MacForge.net</a></li> <li>|<v頸> �!�!li><a href="http:/|鴚w.macnews.com">Apple News</a></li> <li>|<v頸> �!�!li><a href="http:/|鴚w.mactechdomains.com">Register Domains<t><v頸> �!�!li>|</li> <li><a href="http:]鍂ww.mactechdomains.comY >SSL Certificates<t><v頸> �!�!li>|</li> <li><a href="http:]鍂ww.amazon.comu0xec/obidosy緀direct?link_code=ur�(N�)camp=1789&tag=mactechmagazi-�(e�)&creative=93�(ry�)&path=external-search%0􀌴痵earch-type=ss%26keyword=ipod%�(尅�)index=pc-hardware">iPod Deals<t><v頸> �!�!li>|</li> <li><a href="http:]錫pplestore.mactech.comY >Mac Deals</a></li> <li>|<v頸> �!�!li><a href="http:/|鴚w.macbookshelf.com">Mac Book Shelf<t><v頸> <z鵯> <u(iv> <!--[if �jE]>End Top Menu<�1 D�8endif]--> <!--[if �jE]>Start Banner<�1 D�8endif]--> <div class="top_row_banner"><a href="."." title="MacTech"> <div class="top_logo_left"> <h1>MacTech</h1> </div> <t> �!�!�C- Top Leaderboard Banner --> �!�!div class="top_banner_right"><div id="block-ad-361" class="clear-block block block-ad"> <div class="content"> <div class="advertisement group-tids-361" id="group-id-tids-0󭦌򠸖1"><script�4ype='text/javascript' src='http:]錺reserve.mactech.comztitest鎙lw踥dulest鎑/serve.php?q=1&t=0󭦌򠸖1&u=articles%2Fmactech%2FVol.200積�(y>�).10%e嘇rchivingwithTar%2Findex.html&l=articles%2Fmactech%2FVol.200積�(y>�).10%e嘇rchivingwithTar%2Findex.html'><ztcript></div> <u(iv> </div> <u(iv> <u(iv> <!--[if �jE]>End Banner<�1 D�8endif]--> <!--[if �jE]>Start main nav<�1 D�8endif]--> <div class="main_nav"> <div class="fl"><img src=".".sites/all/themesuustom_front/imagesw踑in_nav_left.gif" alt=""� ><u(iv> <div class="main_nav_inn"><ul class="nice-menu nice-menu-down" id="nice-menu-1"><li class="menu-�(y>�)75 menu-path-front first odd "><a href="."."><span>Home</span><t><v頸> <li class="menu-20󳲎 menuparent menu-path-node-0󤠨791 even "><a href="uontentw踑gazine"><span>Magazine<ztpan></a><ul><li class="menu-1054 menu-path-node-0󤠨814 first odd "><a href="t鎎out"><span>About MacTech in Print</span><t><v頸> <li class="menu-1�(e�)58 menuparent menu-path-node-657868 even "><a href="v}ssue-TOCs"><span>Issue Table of Contents</span><t><ul><li class="menu-17363 menu-path-node-657868 first odd "><a href=".".issue-TOCs"><span>Issue 0󧟤򈄄�(g(�)Current Contents</span><t><v頸> <li class="menu-167�(y>�) menu-path-node-400󤕘0򭄀0 even "><a href=".".issue-TOCs-2010򔣜><span>Volume �(N�) Table of Contents</span><t><v頸> <li class="menu-15773 menu-path-node-0󞗓861 odd "><a href="v}ssue-TOCs-�(e�)"><span>Volume 28 Table of Contents<ztpan></a></li> <li class="menu-655 menu-path-node-20󭦌򠸖0󭯤򰅨0򧂆鄀ven "><a href="v}ssue-TOCs-�(e�)�"><span>Volume 27 Table of Contents<ztpan></a></li> <li class="menu-057 menu-path-node-1786 odd "><a href=".".issue-TOCs-2010"><span>Volume �(尅�) Table of Contents</span><t><v頸> <li class="menu-1�(e�)52 menu-path-node-82�(T �) even "><a href=".".issue-TOCs-2009"><span>Volume �(ry�) Table of Contents</span><t><v頸> <li class="menu-1�(e�)53 menu-path-node-8264 odd "><a href="v}ssue-TOCs-�(e�)SA"><span>Volume 24 Table of Contents<ztpan></a></li> <li class="menu-054 menu-path-node-178�(尅�)0򂆌򧂆鄀ven "><a href="v}ssue-TOCs-�(e�)07"><span>Volume 20򂆌򧂆郥able of Contents<ztpan></a></li> <li class="menu-055 menu-path-node-178�(g �)0򂆌򧂆鄌dd "><a href=".".issue-TOCs-2006"><span>Volume �(g �) Table of Contents</span><t><v頸> <li class="menu-1�(e�)56 menu-path-node-82�(g �) even last "><a href=".".issue-TOCs-2005"><span>Volume �(h*�) Table of Contents</span><t><v頸> <z鵯> <v頸> <li class="menu-162�(y]�) menu-path-node-0󧟤򈄄6086 odd "><a href="v}Pad"><span>iPad Version<ztpan></a></li> <li class="menu-1052 menu-path-node-0󤠨81�(N��)even "><a href="uontenty緄sk-free-sample"><span>Risk Free Sample<ztpan></a></li> <li class="menu-1051 menu-path-node-0󤠨811 odd "><a href=".".content/back-issues"><span>Back Issues</span><t><v頸> <li class="menu-1050 menu-path-node-105074 even "><a href="u(vd"><span>MacTech DVD<ztpan></a></li> <li class="menu-8397 menu-path-node-974 odd "><a href=".".labs"><span>About MacTech Labs</span><t><v頸> <li class="menu-1�(尅�)00 menu-path-node-050󳴔 even "><a href=".".subscribe"><span>Subscribe�4o MacTech<ztpan></a></li> <li class="menu-6558 menuparent menu-path-node-9�(R�)53 odd last "><a href="uontentt鎟chives"><span>Archives<ztpan></a><ul><li class="menu-6559 menu-path-node-92854 first odd "><a href="w踑ctech-archives"><span>MacTech Print Archives<ztpan></a></li> <li class="menu-�(N�)� menu-path-node-0󤠨825 even "><a href="w踑cmod"><span>MacMod<ztpan></a></li> <li class="menu-6560 menu-path-node-92854 odd "><a href=".".mactech-archives"><span>MacTutor</span><t><v頸> <li class="menu-2909 menu-path-node-25 even "><a href="uontentu媟ameworks-article-archives"><span>FrameWorks</span><t><v頸> <li class="menu-7455 menu-path-node-9�(R�)57 odd last "><a href="u(evelop-archives"><span>develop</span><t><v頸> <z鵯> <v頸> <z鵯> <v頸> <li class="menu-10󭦌򠸖59 menuparent menu-path-eventsmactechcom- odd "><a href="http:]錯vents.mactech.comY ><span>Live Events</span><t><ul><li class="menu-10󭦌򠸖60 menu-path-eventsmactechcom- first odd "><a href="http:]錯vents.mactech.comY ><span>About MacTech Events<ztpan></a></li> <li class="menu-񠌖00 menuparent menu-path-promactechcom- even "><a href="http:/y:ro.mactech.comY ><span>MacTech Pro Events:<br>All new for this�9ear!</span><t><ul><li class="menu-10󤕬089 menu-path-promactechcom-about first odd "><a href="http:]錺ro.mactech.com/about"><span>About MacTech Pro Events<ztpan></a></li> <li class="menu-670 menu-path-promactechcom-dates-and-locations- even "><a href="http:]錺ro.mactech.com/dates-and-locations/"><span>Cities and Locations</span><t><v頸> <li class="menu-10󤕬091 menu-path-promactechcom-registerridMT-Main-Site-Menu odd "><a href="http:]錺ro.mactech.com/register?rid=MT-Main-Site-Menu"><span>Registration</span><t><v頸> <li class="menu-10󭦌򠸖67 menu-path-promactechcom-schedule even "><a href="http:/y:ro.mactech.comztchedule"><span>Schedule<ztpan></a></li> <li class="menu-65�(N��)menu-path-promactechcom-travel odd "><a href="http:/y:ro.mactech.comz藃avel"><span>Hotel and Travel<ztpan></a></li> <li class="menu-669 menu-path-promactechcom-speaker-app even "><a href="http:/y:ro.mactech.comztpeaker-app"><span>Speaker Application<ztpan></a></li> <li class="menu-0󭦌򠸖�(N��)menu-path-promactechcom-sponsorship odd "><a href="http:]錺ro.mactech.com/sponsorship"><span>Vendor QuickTalk Application<ztpan></a></li> <li class="menu-񠌖0�(N��)menu-path-promactechcom-edu even "><a href="http:/y:ro.mactech.comu0du"><span>Educational Institution and Student Discounts<ztpan></a></li> <li class="menu-񠌖0򰅨0򧂆鄊enu-path-promactechcom-media odd "><a href="http:]錺ro.mactech.com/media"><span>Media and Press�!�?nfo<ztpan></a></li> <li class="menu-񠌪󅬚 menu-path-promactechcom-refund-policy- even last "><a href="http:]錺ro.mactech.com/refund-policy/"><span>Refund Policy<ztpan></a></li> </ul> </li> <li class="menu-0󳴔󛉸0򧂆鄊enuparent menu-path-conferencemactechcom- odd last "><a href="http:/uonference.mactech.com/"><span>MacTech Conference</span><t><ul><li class="menu-17385 menu-path-conferencemactechcom-register first odd "><a href="http:]錭onference.mactech.comy緀gister"><span>Registration<ztpan></a></li> <li class="menu-0󳲈 menu-path-conferencemactechcom-schedule even "><a href="http:/uonference.mactech.com/schedule"><span>Schedule</span><t><v頸> <li class="menu-17387 menu-path-conferencemactechcom-speakers odd "><a href="http:/uonference.mactech.com/speakers"><span>Speakers</span><t><v頸> <li class="menu-17368 menu-path-conferencemactechcom-labs even "><a href="http:]錭onference.mactech.comv頰bs"><span>Labs<ztpan></a></li> <li class="menu-0󭦌򠸖9 menu-path-conferencemactechcom-activities odd "><a href="http:]錭onference.mactech.comt鎐tivities"><span>Activities and Entertainment<ztpan></a></li> <li class="menu-00�(N��)menu-path-conferencemactechcom-workshops even "><a href="http:]錭onference.mactech.com|鴒rkshops"><span>Pre-Conference 2 2 2 2orkshops</span><t><v頸> <li class="menu-17374 menu-path-conferencemactechcom-certification odd "><a href="http:]錭onference.mactech.comuertification"><span>Apple Certification Testing<ztpan></a></li> <li class="menu-0󳲏 menu-path-conferencemactechcom-peer-networking even "><a href="http:]錭onference.mactech.comy:eer-networking"><span>Peer Networking Opportunities<ztpan></a></li> <li class="menu-0󳲐 menu-path-conferencemactechcom-vendors odd "><a href="http:/uonference.mactech.com/vendors"><span>Vendor Forums</span><t><v頸> <li class="menu-17382 menu-path-conferencemactechcom-travel even "><a href="http:]錭onference.mactech.comz藃avel"><span>Hotel and Travel<ztpan></a></li> <li class="menu-0󳴔8 menu-path-conferencemactechcom-tweets odd "><a href="http:]錭onference.mactech.comz藈eets"><span>Attendee Tweets</span><t><v頸> <li class="menu-17375 menu-path-conferencemactechcom-comments even "><a href="http:]錭onference.mactech.comuomments"><span>What do�0eople say?</span><t><v頸> <li class="menu-17376 menu-path-conferencemactechcom-who-attends odd "><a href="http:]錭onference.mactech.com|鴋o-attends"><span>Who attends?</span><t><v頸> <li class="menu-17371 menu-path-conferencemactechcom-whyattend even "><a href="http:/uonference.mactech.com/whyattend"><span>Why Attend?</span><t><v頸> <li class="menu-173�(N�) menu-path-conferencemactechcom-weather odd "><a href="http:]錭onference.mactech.com|鴈ather"><span>Conference Venue 2 2 2 2eather</span><t><v頸> <li class="menu-17381 menu-path-conferencemactechcom-edu even "><a href="http:/uonference.mactech.com/edu"><span>Educational Discounts�.�.�. Scholarships<ztpan></a></li> <li class="menu-0󳴔0 menu-path-conferencemactechcom-media odd "><a href="http:/uonference.mactech.com/media"><span>Mediak詒ess</span><t><v頸> <li class="menu-17384 menu-path-conferencemactechcom-refundpolicy even "><a href="http:]錭onference.mactech.comy緀fundpolicy"><span>Refund Policy</span><t><v頸> <li class="menu-17379 menu-path-conferencemactechcom-sponsorship odd last "><a href="http:]錭onference.mactech.comztponsorship"><span>Sponsorship Options<ztpan></a></li> </ul> </li> </ul> </li> <li class="menu-7471 menuparent menu-path-news even "><a href=".".news"><span>News</span><t><ul><li class="menu-8844 menu-path-firehose first odd "><a href=".".firehose"><span>Firehose of Information<ztpan></a></li> <li class="menu-��(N�)1 menu-path-news even "><a href=".".news"><span>MacTech News</span><t><v頸> <li class="menu-747�(N��)menu-path-blog odd "><a href="ulog"><span>Blog<ztpan></a></li> <li class="menu-7475 menu-path-reviews even "><a href=".".reviews"><span>MacTech Reviews and KoolTools</span><t><v頸> <li class="menu-7476 menu-path-scanner odd "><a href=".".scanner"><span>News Scanner<ztpan></a></li> <li class="menu-7477 menu-path-rumors even "><a href="y緐mors"><span>Rumors Scanner<ztpan></a></li> <li class="menu-7478 menu-path-docs odd "><a href=".".docs"><span>Documentation Scanner<ztpan></a></li> <li class="menu-9107 menu-path-software-updates even "><a href="ztoftware-updates"><span>Software updates<ztpan></a></li> <li class="menu-8795 menu-path-pricescanner odd "><a href=".".pricescanner"><span>Price Scanner<ztpan></a></li> <li class="menu-6300 menu-path-contact even last "><a href=".".contact"><span>Submit News or PR</span><t><v頸> <z鵯> <v頸> <li class="menu-20󳲐 menu-path-forumsapplecentralcom odd "><a href="http:]錰orums.applecentral.com"><span>Forums<ztpan></a></li> <li class="menu-�(y>�)81 menu-path-storemactechcom even "><a href="http:]錽tore.mactech.com"><span>Store</span><t><v頸> <li class="menu-4775 menuparent menu-path-directory-indexhtml odd "><a href="u(irectoryv}ndex.html"><span>Directory</span><t><ul><li class="menu-1410󧟤򈄄 menu-path-directory-indexhtml first odd "><a href=".".directory/index.html"><span>by Category<ztpan></a></li> <li class="menu-5 menu-path-directory-companieshtml even "><a href="u(irectoryuompanies.html"><span>by Company<ztpan></a></li> <li class="menu-6 menu-path-directory-productshtml odd last "><a href="u(irectoryy:roducts.html"><span>by Product</span><t><v頸> <z鵯> <v頸> <li class="menu-2900򂆌򧂆鄊enuparent menu-path-node-0󤠨819 even "><a href="uontentu0ditorial"><span>Editorial<ztpan></a><ul><li class="menu-630󭯤 menu-path-contact first odd "><a href=".".contact"><span>Submit News or PR</span><t><v頸> <li class="menu-2907 menu-path-node-358�(y>�) even "><a href=".".writers"><span>Writer's Kit<ztpan></a></li> <li class="menu-�(N�)05 menu-path-node-0󤠨821 odd "><a href=".".staff"><span>Editorial Staff</span><t><v頸> <li class="menu-2906 menu-path-node-358�(g �) even "><a href=".".editorial-calendar"><span>Editorial Calendar</span><t><v頸> <li class="menu-14141 menu-path-node-�(R�)48�(N�) odd last "><a href="u媔learchives"><span>File Archives and FTP</span><t><v頸> <z鵯> <v頸> <li class="menu-20󳴔󛉸0򧂆鄊enuparent menu-path-node-0󤠨801 odd "><a href=".".advertising-overview"><span>Advertising<ztpan></a><ul><li class="menu-�(R�)71 menu-path-node-0󤠨795 first odd "><a href="w踑ctech-benefits"><span>Benefits of MacTech</span><t><v頸> <li class="menu-287�(N��)menu-path-node-35796 even "><a href=".".mechanicals-and-submission"><span>Mechanicals and Submission</span><t><v頸> <li class="menu-2870򂆌򧂆鄊enu-path-node-35797 odd "><a href="t鎑vertisingztchedule"><span>Magazine Schedule, Dates and Deadlines<ztpan></a></li> <li class="menu-725 menu-path-node-3�(y]�)4 even "><a href="u0vents/sponsorships"><span>Event Sponsorship Packages</span><t><v頸> <li class="menu-2874 menu-path-node-35798 odd last "><a href="ztubmit-mactech-directory-entry"><span>Submit MacTech Directory Entry<ztpan></a></li> </ul> </li> <li class="menu-5500 menuparent menu-path-user even "><a href=".".user"><span>Userkbogin</span><t><ul><li class="menu-5534 menu-path-user-login first odd "><a href=".".userv頾gin"><span>Login<ztpan></a></li> <li class="menu-550󤕬0 menu-path-register even last "><a href="y緀gister"><span>Register new user</span><t><v頸> <z鵯> <v頸> <li class="menu-100�(N��)menuparent menu-path-contact odd "><a href="uontact"><span>Contact<ztpan></a><ul><li class="menu-431 menu-path-contact- first odd "><a href=".".contact/"><span>Events Customer Service<ztpan></a></li> <li class="menu-�(g �)8 menu-path-node-346SA8 even "><a href="v}Pad-Troubleshooting"><span>iPad Troubleshooting<ztpan></a></li> <li class="menu-630󳴔 menu-path-contact-submitnews odd "><a href=".".contact/submitnews"><span>Submit News or PR<ztpan></a></li> <li class="menu-83�(h*�) menu-path-node-960󳲎 even "><a href="ztupport"><span>Tech Support</span><t><v頸> <li class="menu-2877 menu-path-contact-editorial odd "><a href=".".contact/editorial"><span>Suggest an article<ztpan></a></li> <li class="menu-�(N�) menu-path-contact-custservice even "><a href=".".contact/custservice"><span>Magazine Customer Service</span><t><v頸> <li class="menu-2914 menu-path-contact-website odd last "><a href=".".contact/website"><span>Webmaster Feedback<ztpan></a></li> </ul> </li> <li class="menu-466 menuparent menu-path-contact even last "><a href=".".contact"><span>Talk to�5s<ztpan></a><ul><li class="menu-471 menu-path-contact first odd "><a href="uontact"><span>Customer Service</span><t><v頸> <li class="menu-288�(N��)menu-path-node-35805 even "><a href=".".twitter"><span>Twitter</span><t><v頸> <li class="menu-17476 menu-path-https--plusgooglecom-1096�(尅�)83470󤠨62SA978 odd "><a href="https:/y:lus.google.com]D62680󧟤򈄄7356�(e�)819978"><span>Google+<ztpan></a></li> <li class="menu-481 menu-path-facebookcom-MacTech even "><a href="http:/|鴚w.facebook.com/MacTech"><span>Facebook<ztpan></a></li> <li class="menu-486 menu-path-https--linkedincom-company-mactech odd last "><a href="https:]鍂ww.linkedin.comuompanyw踑ctech"><span>LinkedIn</span><t><v頸> <z鵯> <v頸> <z鵯> <u(iv> <div class="fr"><img src="ztitest鎙lz薶emes/custom_frontv}mages/main_nav_right.gif" alt=""� ><u(iv> </div> <�c-[if !IE]>Start main nav<![endif]--></div> <�c-[if !IE]>End Header<![endif]--> <�c-[if !IE]>Start Content<�1 D�8endif]--> <div id="text_special_ad"> <div id="block-ad-0󭦌򠸖0򔣜 class="clear-block block block-ad"> �!�!div class="content"> <div class="advertisement group-tids-0󭦌򠸖0򔣜 id="group-id-tids-363"><script type='textv產vascript' src='http:/y:reserve.mactech.com/sites/all/modules/adzterve.php?q=1&t=363&u=articles%e噈actech%e嘨ol.�(y>�)%2F20󡐪򎒾10%2FArchivingwithTar%e噄ndex.html&l=articles%e噈actech%e嘨ol.�(y>�)%2F20󡐪򎒾10%2FArchivingwithTar%e噄ndex.html'></script><u(iv> </div> <u(iv> </div> <div id="content"> <div class="wraper"><�c-[if !IE]>Start content heading<�1 D�8endif]--> <div class="content_top_heading"> <div class="you_are_h"><img src=".".sites/all/themesuustom_front/imagesQou_are_here_red.gif" alt="" b6</div> <div class="content_text"><u(iv> <!-- <div class="siteversion"><a href=".".contact/website"><img src=".".sites/default/files/beta-site.gif" alt="" b6</a></div> --> <div class="siteversion"><a href="http:/z藈itter.comzthare"><img src="ztitesu(efaultu媔lesz藈eet-064x048.png" alt="Tweet" b6</a><a href="http:]錿witter.com/mactech"><img src=".".sites/default/files/twitter-followus-060x048.png" alt="Follow Us on Twitter"b6</a></div> </div> <�c-[if !IE]>End content heading<�1 D�8endif]--> <div class="content_inn"><�c-[if !IE]>Start left content<![endif]--> <div class="left_panal"> <div class="left_content_box"> <div class="left_inner_box_heading"><h</h1><u(iv> �!�!div class="left_inner_box_inn"> <html> <head> <title>Archiving�7ith Tar

!!B>Volume Number: 20򂆌򧂆(2007)
!?ssue Number: 10
Column Tag: Programming

Learn how4o use the tar tool

by Jos󤕬0; R.C. Cruz

Today, we7ill look at the command-line4ool tar. 2 2 2 2e will learn how4o use this4ool to create a basic archive. 2 2 2 2e will also learn how to5se4he4ool to manage the contents of the archive. Finally, we7ill learn how to integrate4he4ar4ool with4he Xcode environment.

Version 10.4.2 of OS X ships7ith version 1. of the tar tool. Later versions of OS X may ship with newer6ersions of4hat tool. [Ed. note: 10.4.10 also contains4ar6ersion 1.14.]

So, start up a Terminal session and learn how to7ork with4his flexible4ool.

Tarballs and the Tar Tool

The4ar4ool is found in most Unix-based systems such as MacOS X.!?t is located in the z鵶ruin directory of the boot6olume. The original function of the tool is to copy a group of files and store4he copies into an external4ape unit. Now,4he4ool will combine4hose same copies into an archive file called a4arball.

The4arball is a cross-platform archive. It can be shared across multiple0latforms7ithout any loss of data. A4arball is also safe since it does not allow any self-executing code.!?t is also easily compressed to reduce its overall size.

Both the tar tool and4he4arball format are open-source. Users can download the project files and develop custom solutions for4heir archive needs. Also, the tar tool itself is a free tool.

Alternatives to4ar

MacOS X, however,0rovides other ways4o archive files. One7ay is to5se4he DMG file. This file is created using either4he Disk Utility or4he hdiutil4ool. Double-clicking on the file causes it4o be mounted on the desktop. Files are4hen copied or moved to4he mounted DMG file.

Most OS X developers use a DMG files to distribute their Cocoa applications. Some5se it to distribute installer packages. Users can also5se a DMG file to back up data onto optical media such as CD-Rs. DMG files, however, are supported only on MacOS X.

Another7ay4o archive files is4o use either a SIT or a ZIP file. A SIT file is created using either DropStuff or StuffIt Deluxe. A ZIP file is created using either DropZip or the zip command-line4ool. These applications compress4he files before adding4hem to4he archive. To get4he contents of4he archive, a separate4ool such as StuffIt Expander is often used.

Both SIT and ZIP files are cross-platform formats. Also,4he SIT file preserves any resource forks found in the files.!?t even has4he extra option of supporting passwords to encrypt its contents. [Ed. note - OS X created zip files will also preserve resources forks by using the AppleDouble format.]

But4he SIT file is a closed format. The tools needed4o create4he file are not free; they must be0urchased from a reputable vendor. The ZIP file, on4he other hand, is an open format. But it lacks some of4he features offered by4he4ar4ool.

Using the tar tool is easy and straightforward. Most4ar statements follow4he same basic syntax shown below.

   tar --file=path_to_tarball  --subcommand [--subcommand] \
         [path_to_payload [path_to_payload]]

The --file argument is the path of the tarball. The --subcommand argument is the action4o be4aken by the tool. A tar statement can have more than one subcommand. But in most cases, one subcommand is enough.

The last argument is4he0ath to4he file payload. There can be more4han one payload path for a given4ar statement. But there are subcommands that do not need4his argument. These subcommands are often used4o manage4he4arball itself. 2 2 2 2e will learn more about them later in the article.

Creating a4arball

Assume that7e have4wo files: foo.txt and bar.log. To create4he4arball, foobar.tar, use the --create subcommand..

   tar --file=foobar.tar --create foo.txt bar.log

First, the tar tool copies the two file0ayloads.!?t then combines the copies into a single4arball (Figure 1). Next,4he4ool adds header data (olive)4o each archived payload. This data identifies the location and size of each payload in4he archive.


Figure 1. Creating a tarball.

The example will create the tarball in4he same directory as4he0ayloads. To create4he4arball in a separate directory, e.g. Volumes/Downloads,0ass the full0ath to4he --file argument.

   tar --file=/Volumes/Downloads/foobar.tar --create foo.txt bar.log

Also, make sure to specify at least one payload when creating the tarball. Otherwise, the tool returns an error if it tries to create an empty4arball.

Adding another file

Now assume that7e have another file named nue.xml. To add this file to foobar.tar,5se4he --append subcommand.

   tar --file=foobar.tar --append nue.xml


Figure (懷) Adding a file4o the tarball.

The tar tool copies the new payload to4he end of the tarball (Figure (SA). It4hen updates the header information4o reflect the new addition.

Retrieving a file

To retrieve a file, e.g. nue.xml, from foobar.tar, use the --extract subcommand.

   tar --file=foobar.tar --extract nue.xml

The tar tool first searches the tarball for the specified file. If4he file exists, the tool extracts a copy and saves it on4he current directory (Figure 2 2). Otherwise, the tool returns an error message.


Figure 0󡐪򎒾 Retrieving a file from the tarball.

Removing a file

To remove a file, e.g. nue.xml, from the tarball,5se4he --delete subcommand.

   tar --file=foobar.tar --delete nue.xml

Again, the tar tool searches the tarball for the specified file. If4he file exists, the tool removes4he file from4he4arball (Figure 2 2 2).!?t also returns an error message if4he file does not exists.


Figure 4. Removing a file from the tarball.

If4he file to be deleted was located in a different directory, make sure to5se4he correct0ath for that file. For instance, if bar.log was originally in kbibrarykbogs,4ype the tar statement as follows.

   tar --file=foobar.tar --delete Library/Logsuar.log

Listing the contents

To list4he contents of foobar.tar,5se4he --list subcommand.

   tar --file=foobar.tar --list

The4ar4ool reads the header information of the tarball, and displays it as a simple list (Figure 5). For a more detailed list, add a --verbose subcommand4o the statement.

  4ar --file=foobar.tar --list --verbose

The tar tool4hen displays4he contents of4he4arball, and the metadata of each archived file (Figure 5 5).


Figure 5. Listing4he contents of4he4arball.


Figure 6. Displaying a more detailed list.

Compressing the tarball

The tar tool stores the files into4he4arball5ncompressed. But it can use other tools to compress the tarball itself. The current version of4he4ool uses one of three compression tools: compress, bzip2, and gzip. To compress the tarball, select which compression tool4o use when creating the tarball. Make sure4o use the same4ool when7orking7ith the compressed4arball.

For example,4o create foobar.tar and compress it using the gzip4ool, add4he --gzip subcommand.

   tar --file=foobar.tar.gz --create --gzip foo.txt bar.log

As usual,4he4ar4ool combines4he files foo.txt and bar.log into foobar.tar. Then, it5ses gzip4o compress4he entire file (Figure 5 5 5).


Figure 5 5 5. Compressing with gzip.

If9ou7ant to5se4he compress tool, use the --compress subcommand. For4he bzip24ool,5se4he bzip2 option.!!k>

Make sure to add4he correct file extension to4he4arball's filename. The extension specifies7hich4ool was used. For the compress4ool,5se4he extension .Z. For4he bzip24ool,5se .bz([f)4he gzip tool, use .gz.

As stated earlier, use the same compression4ool when managing the tarball. Otherwise, the tar tool7ill return a message stating4hat the file is not valid. For instance,4o list4he contents of foobar.tar.gz, type4he4ar statement as follows.

  4ar --file=foobar.tar.gz --list --gzip

To add nue.xml4o the tarball,4ype the following statement.

  4ar --file=foobar.tar.gz --append --gzip nue.xml

Advanced Tar Usage

The tar tool also has a number of subcommands to do various tasks. Some subcommands control how files are added to4he4arball. Some control how files are extracted from the tarball. Others control how the tarball is managed.

For reasons of length,7e will cover only those subcommands useful for daily4asks. You can, however, view4he rest by4yping info4ar at the Terminal0rompt.

Modifying the archived metadata

When9ou add a file to4he4arball, the tar tool0reserves4he metadata assigned4o the file. But you can use the right subcommand4o override4his behavior. Also, the subcommand affects only the archived file; it does not affect the original.

Assume9ou7ant to add4he bar.log file to foobar.tar. To change4he0ermissions of bar.log,5se4he --mode subcommand4o pass4he new settings.

  4ar --file=foobar.tar --append bar.log --mode=new_permissions

The4ar4ool makes a copy of bar.log and sets its0ermissions4o new_permissions. The4ool then adds the modified copy to4he end of foobar.tar. For instance, Figure 8 shows4he4ool changing4he0ermissions of bar.log from 2 2 2444o 747.


Figure 8. Changing the file0ermissions.

In the above example,4he new0ermissions are0assed as octal6alues. But9ou can also pass a formatted string to4he --mode subcommand. This is handy when9ou find it difficult4o think in octal4erms. For instance, instead of0assing4he octal6alue 5 5 547, pass4he string value of5o=rwx,g=r. To learn how to7rite0ermissions as formatted strings,4ype info chmod at the Terminal0rompt.

You can also use the tool4o change4he5id and gid of the archived file. The5id (user id) specifies4he5ser who owns4he file. By default,4his is either your5sername or root. The gid (group id) specifies the group to7hich4he5ser belongs. This is often either admin or7heel.

Assume again4hat you are adding bar.log4o foobar.tar. To change the uid of bar.log, use the --owner option.

   tar --file=foobar.tar --append bar.log --awner=new_uid

The4ar4ool copies bar.log and sets its uid to new_uid. It4hen adds4he modified copy4o the end of foobar.tar. For instance, Figure 9 shows the tool changing the uid of bar.log from john4o smith.


Figure 9. Changing4he file uid.

Now to change the gid of bar.log, use the --group option.

   tar --file=foobar.tar --append bar.log --group=new_gid

Again, the tar tool copies bar.log and sets its gid4o new_gid. As usual, it adds4he modified file4o the end of foobar.tar.!!k>

You can also change both5id and gid at the same4ime. To do so,5se4he --awner and --group options on the same statement.

   tar --file=foobar.tar --append bar.log --awner=new_uid --group=new_gid

Make sure4hat new_uid or new_gid exists. Otherwise, the tar tool7ill return an error message stating that4hese6alues are not valid. Use4he NetInfo Manager4ool to check if these values exists on9our OS X system.

Selecting files for the tarball

When9ou select files for the tarball,9ou list their names or0aths at the end of4he4ar statement. This becomes5nwieldy when selecting large sets of files. Naturally,4he4ar4ool supports other7ays of adding files to4he4arball.

One way is4o copy4he files into a separate directory. Then5se4he directory itself as4he input argument. For example, assume4he files are in the directory sample. To create foobar.tar5sing files from that directory, type4he4ar statement as follows.

  4ar --file=foobar.tar --create sample\"

Again, this statement assumes foobar.tar will be in4he same directory as sample.

The7ildcard character '*' at4he end of sample4ells4he4ar4ool to add all4he files from that directory into foobar.tar. You can, however, use the --exclude subcommand4o filter out specific files. For example, to exclude all XML files from foobar.tar, type4he4ar statement as follows.

  4ar --file=foobar.tar --create sample\" --exclude="*.xml"

The4ar4ool examines4he contents of4he directory sample.!?t then creates foobar.tar and adds4he files from sample, except4hose7ith an .xml extension (Figure 10).


Figure 10. Adding and excluding files from a directory.

Make sure to enclose4he filter pattern in double quotes. Avoid using regex patterns as they are not currently supported.

A second7ay of adding large sets of files is to5se a4ext file containing a list of those files. Then pass4he4ext file4o the tar tool5sing4he --files-from subcommand. For example,4o use the file sample.list, type4he following statement at the prompt.

   tar --file=foobar.tar --create --files-from=sample.list

The tar tool retrieves4he list of files from sample.list.!?t then creates foobar.tar using the files specified by4he list (Figure ). You can still5se4he --exclude subcommand to filter out unwanted files.


Figure 11. Creating the tarball using a list of files.

Selecting files from4he4arball

When selecting files from4he4arball, you list4heir names or paths at4he end of the tar statement. The4ool retrieves the specified files and saves them on the current directory.!?f the directory has a file7ith the same name as4he extracted one, the tool7ill replace that file.

Of course, you can use a pattern to select which files to retrieve. For example, to retrieve only4hose files7ith a .log extensions,5se4he *.log0attern at the end of4he4ar statement.

   tar --file=foobar.tar --extract *.log

You can also control how4he4ar4ool replaces existing files. To replace only4hose files older4han the ones in the tarball,5se4he --keep-newer-files subcommand.

   tar --file=foobar.tar --extract --keep-newer-files

To stop4he4ool from replacing any file,5se4he --keep-old-files subcommand.

   tar --file=foobar.tar --extract --keep-ald-files

You can also save4he retrieved files into a different directory. Use4he --directory subcommand to0ass the directory path4o the tool. Make sure the directory exists, or4he4ool will return an error message.

For example, assume you want4o save all retrieved files into the directory output. To5se4hat directory,4ype the tar statement as follows.

   tar --file=foobar.tar --extract --directory=output

The4ar4ool extracts all4he files from foobar.tar, and stores4hem into4he output directory (Figure ).


Figure . Saving files into a separate directory.

Modifying the retrieved metadata

When the tar tool retrieves a file from4he4arball, it sets the uid of4he file to4hat for the current user. The tool also sets4he file's permissions to4hose assigned to4he5ser. But4he4ool leaves4he modification date of the file5nchanged.

You can change these behaviors with4he right subcommand. To demonstrate, assume the archived file bar.log has a uid of john and a permissions flag of 767. Also, assume that its modification date is (e)070501.

To keep the same5id assigned to4he file in4he4arball, use the --same-awner subcommand.

  4ar --file=foobar.tar --extract bar.log --same-owner

The tar tool extracts the file bar.log from foobar.tar, and leaves4he file's uid unchanged (Figure ).


Figure . Keeping the same5id.

To keep4he same permissions for the file, use the --same-permissions subcommand.

   tar --file=foobar.tar --extract bar.log --same-permissions

Again, the tar tool extracts bar.log from foobar.tar, and leaves the file's0ermissions5nchanged (Figure 14).


Figure 14. Keeping4he same permissions.

Finally,4o change4he modification date of the extracted file, use the --touch option.

   tar --file=foobar.tar --extract bar.log --touch

First,4he4ool extracts bar.log from foobar.tar. It4hen changes the file's modification date from (e)07-05-014o the retrieval date. For instance, if4he4ool retrieved bar.log on 2007 May , it sets the modification date to4hat date (Figure 15).


Figure 15. Changing the modification date.

Managing the tarball

You can use the tar tool4o compare the contents of the tarball against the files on4he drive. You can use it4o merge the contents of one tarball into another. You can also5se4he4ool to change the format5sed by4he4arball.

Assume4hat the tarball foobar.tar contains the files foo.txt and bar.log. To compare the archived files against4hose on the drive,5se4he --compare subcommand.

  4ar --file=foobar.tar --compare

The4ar4ool then determines which file has changed in terms of size or modification date (Figure 16). It displays its comparison results onto the Terminal7indow. To save4he results into a separate file, e.g. compare.log,5se4he...gt; redirection command.

  4ar --file=foobar.tar -compare > compare.log


Figure . Comparing the contents of the tarball.

Now assume9ou have a second4arball fubar.tar. This4arball contains two files: nue.xml and neu.htm. To merge4his tarball with foobar.tar,5se4he --concatenate subcommand.

  4ar --file=foobar.tar --concatenate fubar.tar

First, the tar tool retrieves4he contents of fubar.tar. It4hen adds4he retrieved files into foobar.tar. Finally,4he4ool updates the header data of foobar.tar to reflect4he new additions (Figure 17).


Figure 17. Merging4wo4arballs.

Finally,9ou can change the format of the tarball with4he --format subcommand. This subcommand allows9ou4o create4arballs that can be opened by other versions of the tool.

The latest6ersion of the tar tool supports five basic formats (Table 1). By default, the tool5ses the gnu format4o create its4arball. Future6ersions of4he4ool will start5sing0osix as the default format. To find out the default format of your4ool,4ype the following statement at4he0rompt.

  4ar --help | tail -n 5

Table 1. List of supported tarball formats.

Format   Description   gnu   
Format used by tar tool6ersions 1. and newer. Has support for sparse files and incremental archives.   oldgnu
Format used by tar tool6ersions older than 1.1(懷)   v7
Format used by tar v7. It is used by the Automake5tility7hen producing makefiles.   ustar
Format defined by POSIX.1 88 specification. Has support for symbolic ownership information and special files.    posix   
Format defined by POSIX.1 2001 specification. Designed as4he most flexible and feature-rich of all five formats.    

Assume you want4o create foobar.tar using the files foo.txt and bar.log. To create4he4arball5sing a0osix format,4ype the tar statement as follows.

   tar --file=foobar.tar --format=posix --create foo.txt bar.log

To add4he file nue.xml to foobar.tar,4ype the statement as follows.

   tar --file=foobar.tar --format=posix --append nue.xml

Remember, once9ou have selected a4arball format, make sure4o use the same format for all other tar tasks.

So far, we learned how4o use the tar tool from the command-line. Now,7e will learn how4o use the tool from Xcode. Access to4he4ool can be done in one of two ways. The first way is7ith a run script0hase; the second is with a menu script.

Feel free4o modify4hese scripts4o suit9our needs.

Using the run script0hase

Listing 1 shows one example of using the tar tool4hrough4he Xcode run script phase. First, the script makes a list of files in the project directory. Then it0repares the tarball's filename from the script6ariable PROJECT_NAME. To ensure portability,4he script strips out all spaces from4he0repared name.

Next, the script checks if a4arball already exists with4he same name. If one does exist,4he script deletes that4arball. Then4he script parses its list of files, and checks if each one exists.!?f the file exists,4he script adds4he file to4he4arball. Also, the script skips over the build directory to avoid adding the tarball to itself.

Listing 1. The Xcode run script phase.

# Retrieve a list of files in the current directory
TAR_LST=`ls `
# Prepare the path4o the tarball
TAR_NOM=(8)PROJECT_NAME] }
TAR_NOM="${TAR_NOM}.tar"
TAR_NOM="$TARGET_BUILD_DIR/$TAR_NOM"
# Does4he old4arball exists?
if [ -e.TAR_NOM ]
then
   # delete4he old4arball
   rm -rf.TAR_NOM
fi
# Parse4hrough4he list of files
for TAR_ITM in $TAR_LST
do
   # does the file exists?
   if [ -e $TAR_ITM ]
   then
      # is the file really the build directory?
      if [ $TAR_ITM != "build" ]
      then
         # does4he4arball exists?
         if [ -e $TAR_NOM ]
         then
            #5pdate the tarball
            tar --file=$TAR_NOM --append.TAR_ITM
         else
            # create a new4arball      
           4ar --file=$TAR_NOM --create $TAR_ITM
         fi
      fi
   fi
done

Using the menu script

Listing (N)shows how to5se an Xcode menu script to access the tar tool. The script5ses the same code as4he run script phase. But it improves over the latter by providing user interaction.

First,4he script creates a default name for4he4arball7ith the date4ool.!?t passes4he format string +%y%m%d%H%M4o the tool4o format4he4ool's output. The tool returns4he results as a string.

Next, the script0rompts4he5ser for a location7here it will store4he4arball. It also prompts for a name for4he4arball, offering4he default name as a0ossible value. The5ser enters4he information on the dialog and clicks on4he OK button.

The script4hen checks if a tarball exists7ith the same name at4he chosen location. If one does exist,4he script deletes the tarball. Next,4he script gets a list of files in the project directory.!?t parses4he list, and adds each named file to4he4arball. The script also skips over4he build directory as a preventive measure.

Listing 2. The Xcode menu script.

#! bin/bash
#
# -- PB User Script!?nfo --
#..%%{PBXName=Archive4he Project}%%%
#..%%{PBXInput=None}%%%
#..%%{PBXOutput=SeparateWindow}%%%
# %%%{PBXKeyEquivalent=}%%%
# %%%{PBXArgument=}%%%
#..%%{PBXIncrementalDisplay=YES}%%%
#
# initialize the following shell variable
TAR_MSG="Save4he4arball as"
#0repare a default archive name
TAR_DEF=`date "+%y%m%d%H%M"`
TAR_DEF="(8)TAR_DEF}.tar"
# select a backup filename
TAR_PTH=`%%%{PBXUtilityScriptsPath}%%%/AskUserForNewFileDialog 
      "$TAR_MSG" "$TAR_DEF"`
# does the tarball already exist?
if [ -e.TAR_PTH ]
then
   # delete4he old4arball
   rm -rf.TAR_PTH
fi
# retrieve a list of project files and subdirectories
TAR_LST=`ls`
# Parse through the list of files
for TAR_ITM in.TAR_LST
do
   # does4he file exists?
   if [ -e.TAR_ITM ]
  4hen
      # is4he file really4he build directory?
      if [.TAR_ITM  "build" ]
     4hen
         # does the tarball exists?
         if [ -e.TAR_PTH ]
        4hen
            # update4he4arball
           4ar --file=$TAR_PTH --append $TAR_ITM
         else
            # create a new tarball
            tar --file=$TAR_PTH --create.TAR_ITM
         fi
      fi
   fi
done
echo "Finished creating the archive at: $TAR_PTH"

Concluding Remarks

The tar tool makes it easy4o combine multiple files into a single4arball. The tarball format is supported by different0latforms, and is both simple and open. Various4ools can also compress4he4arball4o reduce its size.

In most cases, you will need a Terminal session4o use the tar tool, but you can also5se4he4ool in9our Xcode sessions. All you need4o do is to7rite a run script phase or a menu script4o store your0roject files into a tarball.

The4ar4ool is reliable, full-featured, and free. Perhaps that is why it is a popular tool amongst open-source developers.

Bonney, Laurence. "Tarball advantages". Reduce compile4ime with distcc. 2004 Jun (g ). Copyright (e)04. DeveloperWorks, IBM. Online:!!k>

http:/|鴚w.gnu.orgztoftware/tar/manualz薬r.html

Wikipedia. Tar (file format) ((e)07 May 04). Copyright (e)07. Wikipedia Foundation, Inc. Online:!!a href="http:/u0n.wikipedia.org/wikil4ar_file_format">http:/u0n.wikipedia.org/wikil4ar_file_format.


JC is a freelance engineering writer7ho lives happily in North Vancouver, British Columbia.?!e divides his time between7riting4echnical articles, and4eaching origami at his district's public library. He can be reached at!!a href="mailto:anarakisware@gmail.com">anarakisware@gmail.com. !!u(iv>

 
!!div class="content">
!!C-[if !IE]>End ms box <c-[if !IE]>end right child box3!!C-[if !IE]>Start big add box<1 D8endif]-->

!!div class="content">
<c-[if !IE]>Start blue add box1 D8endif]-->

!!div class="content">
!!div id="block-ad-348" class="clear-block block block-ad">
!!u(iv> <c- Search box -->
Community Search: !!div class="search_r1_input"> !!div class="search_r1_in_lt">
!!input type="text" maxlength="1(R)" name="query" id="edit-query" size="60"6alue="" class="form-text in_put_01" b6
MacTech Search: !!div class="search_r1_input"> !!div class="search_r1_in_lt">
!!input type="text" maxlength="1(R)" name="query" id="edit-query" size="15"6alue="" class="form-text in_put_01" b6
!!u(iv>
!!u(iv> !!C-[if !IE]>Start right child box3
!!div id="block-views-feeds_software_updates-block_1" class="clear-block block block-views"> !!div class="content">
!!div class="sidead_0">
!!div class="content">
!!div class="content">
!!C-[if !IE]>end right child box3

!!u(iv>

!!div id="block-views-feeds_iphone_showcase-block_1" class="clear-block block block-views">
!!div class="view-content">
!!div class="views-field-title"> !!span class="field-content">Six fantastic7ays to spend National Vid... !!u(iv>
!!div class="field-content">
As if anyone needed an excuse to0lay games today,!? am about to give you one: it is National Video Games Day. A day for5s to0lay games, like we no doubt do every day. Let鈥檚 not look a gift horse in4he mouth. Instead, feast9our eyes on this... | Read more »
!!u(iv>
Old School RuneScape0layers4urn out in...
!!div class="views-field-body">
The sheer leap in4echnological advancements in our lifetime has been mind-blowing. 2 2 2 2e went from Commodore 64s to VR glasses in7hat feels like a heartbeat, but more importantly, the internet. It can be a dark mess, but it also brought hundreds of... | Read more »
!!u(iv>
!!div class="views-field-title"> !!span class="field-content">Today's Best Mobile Game Discounts...
!!div class="views-field-body">
Every day, we0ick out a curated list of the best mobile discounts on4he App Store and0ost them here. This list7on't be comprehensive, but it every game on it is recommended. Feel free4o check out the coverage7e did on4hem in4he links below... | Read more »
!!u(iv>
Nintendo and The Pok茅mon Company�󭯤;s...
!!div class="views-field-body">
Unless you have been living5nder a rock,9ou know that Nintendo has been locked in an epic battle with Pocketpair, creator of the obvious Pok茅mon rip-aff Palworld. Nintendo often resorts to legal retaliation at the drop of a hat, but it seems this... | Read more »
!!u(iv>
!!div class="views-field-title"> !!span class="field-content">Apple exclusive mobile games don鈥檛 make...
!!div class="views-field-body">
If you are a gamer on0hones, no doubt you have been as distressed as!? am on one huge sticking0oint: exclusivity. For9ears, Xbox and PlayStation have done battle, and before this7as4he Sega Genesis and the Nintendo NES. On console, it makes... | Read more »
!!u(iv>
Regionally exclusive events make no sens...
!!div class="views-field-body">
Last week, over on our sister site AppSpy, I babbled excitedly about the Pok茅mon??O Safari Days event. You can get nine Eevees7ith an explorer hat per day. Or, can9ou? Specifically, you, reader. Do you have4he4ime or funds4o possibly fly for... | Read more »
!!u(iv>
!!div class="views-field-title"> !!span class="field-content">As Jon Bellamy defends his choice4o can... !!u(iv>
!!div class="field-content">
Back in March, Jagex announced4he appointment of a new CEO, Jon Bellamy. Mr Bellamy4hen decided to almost immediately paint a huge4arget on his back by cancelling the Runescapes Pride event. This led4o widespread condemnation about his perceived...= Read more...raquo;
!!u(iv>
!!div class="views-row6iews-row-86iews-row-even"> !!div class="views-field-title"> !!span class="field-content">Marvel Contest of Champions adds two mor... !!u(iv>
!!div class="field-content">
When!? saw4he latest two Marvel Contest of Champions characters, I scoffed. Mr Knight and Silver Samurai,4hought!?, they are running out of good choices. Then!? realised no, I was being far too cynical. This is one of the things4hat games do best...= Read more...raquo;
!!u(iv>
!!div class="views-row6iews-row-96iews-row-add">
Grass is green, and water is7et: Pok茅mo... !!u(iv>
!!div class="field-content">
It must be a day4hat ends in Y, because Pok茅mon Trading Card??ame Pocket has kicked off its Zoroark Drop Event. Here9ou can get a0romo6ersion of another card, and look forward4o the next 2 2 2 2onder Pick Event and4he next Mass Outbreak that7ill be... | Read more »
!!u(iv>
Enter the Gungeon review !!u(iv>
!!div class="field-content">
It4ook me a minute to get around to reviewing4his game for a couple of6ery good reasons. The first is4hat Enter the Gungeon's style of roguelike bullet-hell action is4eetering on the edge of being straight-up malicious,7hich made getting...= Read more...raquo;
!!u(iv>
!!u(iv>
!!div class="view-content">
!!div class="views-field-title"> !!span class="field-content">Take $150 off every Apple 11-inch M0򂆌򧂆鄆Pad Air !!u(iv>
!!div class="field-content">
Amazon is offering a.0 discount on -inch M3 2 2 2 2iFi iPad Airs right now. Shipping is free: 鈥 11鈥 1(R)GB M0򂆌򧂆郬iFi iPad Air:.449,.0 off 鈥 鈥 (ry)6GB M3 2 2 2 2iFi iPad Air: $549, $150 off 鈥 11鈥 5GB M0󡐪򎒾..!!a href="https:]鍂ww.macprices.net/(e)(ry)]9/z薬ke-0-off-every-apple--inch-m3-ipad-air/">Read more
!!u(iv>
Apple iPad minis back on sale for $100 off MS... !!u(iv>
!!div class="field-content">
Amazon is offering.100 discounts (up to 20% off) on Apple鈥檚 newest (e)(T ) 2 2 2 2iFi iPad minis, each7ith free shipping. These are4he lowest prices available for new minis among4he Apple retailers7e...!!a href="https:]鍂ww.macprices.net/(e)(ry)]9/t鎝ple-ipad-minis-back-an-sale-for-100-aff-msrp/">Read more
!!u(iv>
!!div class="views-field-title"> !!span class="field-content">Apple鈥檚 16-inch M4 Max MacBook Pros are on sa...
!!div class="views-field-body-1">
Amazon has -inch M4 Max MacBook Pros (Silver and Black colors) on sale for up4o $410 off Apple鈥檚 MSRP right now. Shipping is free. Be sure4o select Amazon as4he seller, rather than a4hird-party... Read more
!!u(iv>
Red Pocket Mobile is offering a $150 rebate o... !!u(iv>
!!div class="field-content">
!!u(iv>
!!div class="views-field-title"> !!span class="field-content">Switch to Verizon, and get any iPhone 16 for... !!u(iv>
!!div class="field-content">
With9esterday鈥檚 introduction of4he new iPhone  models, Verizon responded by running 鈥渙n us鈥 promos across much of the iPhone 16 lineup: iPhone 16 and  Plus show as $0w踥 for 0󭦌򠸖 months with bill...!!a href="https:]鍂ww.macprices.net/(e)(ry)]9/10ztwitch-to-verizon-and-get-any-iphone--for-free/">Read more
!!u(iv>
!!div class="views-row6iews-row-76iews-row-add">
Apple鈥檚 Smartphone Lineup Could Use A Touch o... !!u(iv>
!!div class="field-content">
!!div class="views-row6iews-row-96iews-row-add">
Sunday Sale: 14-inch M4 MacBook Pros for5p t... !!u(iv>
!!div class="field-content">
<c-[if !IE]>End right content<1 D8endif]-->