{"id":416,"date":"2016-08-29T17:25:04","date_gmt":"2016-08-29T11:55:04","guid":{"rendered":"https:\/\/www.hexnode.com\/blogs\/?p=416"},"modified":"2022-07-07T11:16:17","modified_gmt":"2022-07-07T05:46:17","slug":"ipa-file","status":"publish","type":"post","link":"https:\/\/www.hexnode.com\/blogs\/ipa-file\/","title":{"rendered":"IPA file &#8211; An in-depth view"},"content":{"rendered":"<p>An IPA file extension is used to represent an archive containing Apple app bundle. The IPA file is a zip archive, so that when the file extension .ipa is changed to .zip, the archive can be opened and files can be extracted. The IPA file contains a &#8216;Payload&#8217; folder and an iTunesArtwork file. The iTunesArtwork file is used to show the app icon in the App Store and iTunes and contains a 512\u00d7512 PNG image. Payload folder contains all data related to the app. An iTunesMetadata.plist can be seen inside the IPA file, which contains details such as <a href=\"https:\/\/www.hexnode.com\/blogs\/apple-ids-in-ios-device-management\/?utm_source=ipa_file&amp;utm_medium=referral&amp;utm_campaign=internal_link\" target=\"_blank\" rel=\"noopener noreferrer\">Apple ID<\/a>, artist name, buy-only (can be set true or false), version, price, publisher and all other information regarding the app. A PLIST file is an XML file.<\/p>\n<p>When opening a Payload folder, there is a .app folder which represents the name of the application. In this folder, all data related to the app can be found. There are a lot of .lproj folders which represents languages such as English, Spanish etc. The .lproj are folders holding localizations and each .lproj contains a Localizable.strings file. The Localizable.strings file is also an XML file. An executable file (with no file extension) is present in the .app. Executable files are specified using Info.plist.<\/p>\n<p>Two Localizable.strings file samples (a part of the file) are given below, one located in en.lproj (English),<\/p>\n<div class=\"copy-code-download\">\n<pre class=\"theme:github font:monospace font-size:15 line-height:32 toolbar:1 show-plain:3 lang:default decode:true\" title=\"Sample Localizable.strings file located in en.lproj (English)\">&lt;key&gt;AudioErrorDialogTitle&lt;\/key&gt;\r\n&lt;string&gt;Audio Error&lt;\/string&gt;\r\n&lt;key&gt;Back&lt;\/key&gt;\r\n&lt;string&gt;Back&lt;\/string&gt;\r\n&lt;key&gt;Cancel&lt;\/key&gt;\r\n&lt;string&gt;Cancel&lt;\/string&gt;\r\n&lt;key&gt;CannotFindCameraMessage&lt;\/key&gt;\r\n&lt;string&gt;Camera not found.&lt;\/string&gt;<\/pre>\n<\/div>\n<p>and the other in fr.lproj (French).<\/p>\n<div class=\"copy-code-download\">\n<pre class=\"theme:github font:monospace font-size:15 line-height:32 toolbar:1 show-plain:3 lang:default decode:true\" title=\"Sample localizable.strings file located in fr.lproj (English)\">&lt;key&gt;AudioErrorDialogTitle&lt;\/key&gt;\r\n&lt;string&gt;Erreur audio&lt;\/string&gt;\r\n&lt;key&gt;Back&lt;\/key&gt;\r\n&lt;string&gt;Retour&lt;\/string&gt;\r\n&lt;key&gt;Cancel&lt;\/key&gt;\r\n&lt;string&gt;Annuler&lt;\/string&gt;\r\n&lt;key&gt;CannotFindCameraMessage&lt;\/key&gt;\r\n&lt;string&gt;Aucune cam\u00e9ra disponible.&lt;\/string&gt;<\/pre>\n<\/div>\n<p>There will be a .bundle folder inside an IPA file, such as Settings.bundle or FBConnect.bundle. Settings.bundle stores setting page files.<\/p>\n<h2>Information Property Lists (Info.plist) in an IPA File<\/h2>\n<p>Information Property Lists can be seen inside the root folder of an IPA bundle. The contents of a sample Info.plist is given below:<\/p>\n<div class=\"copy-code-download\">\n<pre class=\"theme:github font:monospace font-size:15 line-height:32 toolbar:1 show-plain:3 lang:default decode:true\" title=\"Sample Info.plist\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;!DOCTYPE plist PUBLIC \"-\/\/Apple\/\/DTD PLIST 1.0\/\/EN\" \"http:\/\/www.apple.com\/DTDs\/PropertyList-1.0.dtd\"&gt;\r\n&lt;plist version=\"1.0\"&gt;\r\n&lt;dict&gt;\r\n&lt;key&gt;CFBundleDevelopmentRegion&lt;\/key&gt;\r\n&lt;string&gt;en&lt;\/string&gt;\r\n&lt;key&gt;CFBundleDisplayName&lt;\/key&gt;\r\n&lt;string&gt;Hexnode&lt;\/string&gt;\r\n&lt;key&gt;CFBundleExecutable&lt;\/key&gt;\r\n&lt;string&gt;Hexnode&lt;\/string&gt;\r\n&lt;key&gt;CFBundleIconFile&lt;\/key&gt;\r\n&lt;string&gt;Hexnode.png&lt;\/string&gt;\r\n&lt;key&gt;CFBundleIdentifier&lt;\/key&gt;\r\n&lt;string&gt;com.mitsogo.hexnode&lt;\/string&gt;\r\n&lt;key&gt;CFBundleInfoDictionaryVersion&lt;\/key&gt;\r\n&lt;string&gt;6.0&lt;\/string&gt;\r\n&lt;key&gt;CFBundleName&lt;\/key&gt;\r\n&lt;string&gt;Hexnode&lt;\/string&gt;\r\n&lt;key&gt;CFBundlePackageType&lt;\/key&gt;\r\n&lt;string&gt;APPL&lt;\/string&gt;\r\n&lt;key&gt;CFBundleResourceSpecification&lt;\/key&gt;\r\n&lt;string&gt;ResourceRules.plist&lt;\/string&gt;\r\n&lt;key&gt;CFBundleSignature&lt;\/key&gt;\r\n&lt;string&gt;????&lt;\/string&gt;\r\n&lt;key&gt;CFBundleVersion&lt;\/key&gt;\r\n&lt;string&gt;0.33&lt;\/string&gt;\r\n&lt;key&gt;DTPlatformName&lt;\/key&gt;\r\n&lt;string&gt;iphoneos&lt;\/string&gt;\r\n&lt;key&gt;DTSDKName&lt;\/key&gt;\r\n&lt;string&gt;iphoneos2.1&lt;\/string&gt;\r\n&lt;key&gt;LSRequiresIPhoneOS&lt;\/key&gt;\r\n&lt;string&gt;YES&lt;\/string&gt;\r\n&lt;key&gt;MinimumOSVersion&lt;\/key&gt;\r\n&lt;string&gt;2.1&lt;\/string&gt;\r\n&lt;key&gt;SignerIdentity&lt;\/key&gt;\r\n&lt;string&gt;Apple iPhone OS Application Signing&lt;\/string&gt;\r\n&lt;\/dict&gt;\r\n&lt;\/plist&gt;<\/pre>\n<\/div>\n<p>All keys used in Info.plist file, and its values can be seen at <a href=\"https:\/\/developer.apple.com\/library\/mac\/documentation\/General\/Reference\/InfoPlistKeyReference\/Introduction\/Introduction.html\" rel=\"nofollow\">About Info.plist Keys and Values<\/a>.<\/p>\n<h2>Code Signing<\/h2>\n<p>Some IPA files uses Code Signing. Code signature is used to determine whether the code is modified by any person other than the one who signed the app. An update can be identified by the system as the same app if the same unique identifier is used to sign the new version. Signed code can be seen in .ipa\\Payload\\.app\\_CodeSignature\\CodeResources.<\/p>\n<p>A sample signed code is shown below. The signed code is an XML code.<\/p>\n<div class=\"copy-code-download\">\n<pre class=\"theme:github font:monospace font-size:15 line-height:32 toolbar:1 show-plain:3 lang:default decode:true\" title=\"Sample signed code (XML code)\">&lt;key&gt;files&lt;\/key&gt;\r\n&lt;dict&gt;\r\n&lt;key&gt;Default.png&lt;\/key&gt;\r\n&lt;data&gt;0EXsPsU2vdCjAbnGkXv75mUjww4=&lt;\/data&gt;\r\n&lt;key&gt;Dist.plist&lt;\/key&gt;\r\n&lt;data&gt;s45CsB1sm2EFR9Z1NilFQ5hxXrI=&lt;\/data&gt;\r\n&lt;key&gt;Entitlements.plist&lt;\/key&gt;\r\n&lt;data&gt;P9msvFKf4JmXZjt3lnCcp7nqx1A=&lt;\/data&gt;\r\n&lt;key&gt;Icon.png&lt;\/key&gt;\r\n&lt;data&gt;NqgkUUSrayNfc4kTtMazDd8c18g=&lt;\/data&gt;\r\n&lt;key&gt;PkgInfo&lt;\/key&gt;\r\n&lt;data&gt;n57qDP4tZfLD1rCS43W0B4LQjzE=&lt;\/data&gt;\r\n&lt;\/dict&gt;<\/pre>\n<\/div>\n<p>Code signature consists of:<\/p>\n<ul>\n<li>Seal: Seal is a collection of hashes of various parts of the code.<\/li>\n<li>Digital signature: A digital signature is used to sign the seal.<\/li>\n<li>Unique identifier: A unique identifier is provided in the code signature for identifying the code.<\/li>\n<\/ul>\n<p>Code signing is used mainly for three purposes, to determine whether:<\/p>\n<ol>\n<li>A piece of code is modified,<\/li>\n<li>The different versions of code come from the same source, and<\/li>\n<li>The app is reliable (for example, whether the app access keychain).<\/li>\n<\/ol>\n<h2>PkgInfo<\/h2>\n<p>PkgInfo file is used to alternatively specify the application type (4 bytes) followed by signature (4 bytes). For example, a PkgInfo file contains \u201cAPPLtxtt\u201d for TextEdit application. This file is not required, and the information in it can be given inside the information property list within the IPA file.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>An IPA file extension is used to represent an archive containing Apple app bundle. The&#8230;<\/p>\n","protected":false},"author":6,"featured_media":1130,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[263],"tags":[886],"class_list":["post-416","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technical-deep-dives","tag-app-management","tab_group-immersive-reads"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>IPA file - An in-depth view<\/title>\n<meta name=\"description\" content=\"IPA file extension is to represent apps for an iOS device. IPA file is viewed here in depth to know every file present inside the file format.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.hexnode.com\/blogs\/ipa-file\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"IPA file - An in-depth view\" \/>\n<meta property=\"og:description\" content=\"IPA file extension is to represent apps for an iOS device. IPA file is viewed here in depth to know every file present inside the file format.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.hexnode.com\/blogs\/ipa-file\" \/>\n<meta property=\"og:site_name\" content=\"Hexnode Blogs\" \/>\n<meta property=\"article:published_time\" content=\"2016-08-29T11:55:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-07-07T05:46:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.hexnode.com\/blogs\/wp-content\/uploads\/2016\/08\/23145423\/ipa-file.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"880\" \/>\n\t<meta property=\"og:image:height\" content=\"414\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Neil John\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Neil John\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.hexnode.com\/blogs\/ipa-file\/\",\"url\":\"https:\/\/www.hexnode.com\/blogs\/ipa-file\",\"name\":\"IPA file - An in-depth view\",\"isPartOf\":{\"@id\":\"https:\/\/www.hexnode.com\/blogs\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.hexnode.com\/blogs\/ipa-file#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.hexnode.com\/blogs\/ipa-file#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cdn.hexnode.com\/blogs\/wp-content\/uploads\/2016\/08\/ipa-file.jpg?format=webp\",\"datePublished\":\"2016-08-29T11:55:04+00:00\",\"dateModified\":\"2022-07-07T05:46:17+00:00\",\"author\":{\"@id\":\"https:\/\/www.hexnode.com\/blogs\/#\/schema\/person\/563c22c24d13be3fb41c0bd346fdc6c7\"},\"description\":\"IPA file extension is to represent apps for an iOS device. IPA file is viewed here in depth to know every file present inside the file format.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.hexnode.com\/blogs\/ipa-file#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.hexnode.com\/blogs\/ipa-file\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.hexnode.com\/blogs\/ipa-file#primaryimage\",\"url\":\"https:\/\/cdn.hexnode.com\/blogs\/wp-content\/uploads\/2016\/08\/ipa-file.jpg?format=webp\",\"contentUrl\":\"https:\/\/cdn.hexnode.com\/blogs\/wp-content\/uploads\/2016\/08\/ipa-file.jpg?format=webp\",\"width\":880,\"height\":414,\"caption\":\"ipa file\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.hexnode.com\/blogs\/ipa-file#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.hexnode.com\/blogs\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"IPA file &#8211; An in-depth view\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.hexnode.com\/blogs\/#website\",\"url\":\"https:\/\/www.hexnode.com\/blogs\/\",\"name\":\"Hexnode Blogs\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.hexnode.com\/blogs\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.hexnode.com\/blogs\/#\/schema\/person\/563c22c24d13be3fb41c0bd346fdc6c7\",\"name\":\"Neil John\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.hexnode.com\/blogs\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/63f298af21f8b0492f9743897e3f1719efa478254c7a1901aa7702d7cca8aad5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/63f298af21f8b0492f9743897e3f1719efa478254c7a1901aa7702d7cca8aad5?s=96&d=mm&r=g\",\"caption\":\"Neil John\"},\"description\":\"Product Consultant @ Hexnode. Love to talk the talk and walk the walk.\",\"url\":\"https:\/\/www.hexnode.com\/blogs\/author\/neeraj\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"IPA file - An in-depth view","description":"IPA file extension is to represent apps for an iOS device. IPA file is viewed here in depth to know every file present inside the file format.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.hexnode.com\/blogs\/ipa-file","og_locale":"en_US","og_type":"article","og_title":"IPA file - An in-depth view","og_description":"IPA file extension is to represent apps for an iOS device. IPA file is viewed here in depth to know every file present inside the file format.","og_url":"https:\/\/www.hexnode.com\/blogs\/ipa-file","og_site_name":"Hexnode Blogs","article_published_time":"2016-08-29T11:55:04+00:00","article_modified_time":"2022-07-07T05:46:17+00:00","og_image":[{"width":880,"height":414,"url":"https:\/\/cdn.hexnode.com\/blogs\/wp-content\/uploads\/2016\/08\/23145423\/ipa-file.jpg","type":"image\/jpeg"}],"author":"Neil John","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Neil John","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.hexnode.com\/blogs\/ipa-file\/","url":"https:\/\/www.hexnode.com\/blogs\/ipa-file","name":"IPA file - An in-depth view","isPartOf":{"@id":"https:\/\/www.hexnode.com\/blogs\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.hexnode.com\/blogs\/ipa-file#primaryimage"},"image":{"@id":"https:\/\/www.hexnode.com\/blogs\/ipa-file#primaryimage"},"thumbnailUrl":"https:\/\/cdn.hexnode.com\/blogs\/wp-content\/uploads\/2016\/08\/ipa-file.jpg?format=webp","datePublished":"2016-08-29T11:55:04+00:00","dateModified":"2022-07-07T05:46:17+00:00","author":{"@id":"https:\/\/www.hexnode.com\/blogs\/#\/schema\/person\/563c22c24d13be3fb41c0bd346fdc6c7"},"description":"IPA file extension is to represent apps for an iOS device. IPA file is viewed here in depth to know every file present inside the file format.","breadcrumb":{"@id":"https:\/\/www.hexnode.com\/blogs\/ipa-file#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.hexnode.com\/blogs\/ipa-file"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hexnode.com\/blogs\/ipa-file#primaryimage","url":"https:\/\/cdn.hexnode.com\/blogs\/wp-content\/uploads\/2016\/08\/ipa-file.jpg?format=webp","contentUrl":"https:\/\/cdn.hexnode.com\/blogs\/wp-content\/uploads\/2016\/08\/ipa-file.jpg?format=webp","width":880,"height":414,"caption":"ipa file"},{"@type":"BreadcrumbList","@id":"https:\/\/www.hexnode.com\/blogs\/ipa-file#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.hexnode.com\/blogs\/"},{"@type":"ListItem","position":2,"name":"IPA file &#8211; An in-depth view"}]},{"@type":"WebSite","@id":"https:\/\/www.hexnode.com\/blogs\/#website","url":"https:\/\/www.hexnode.com\/blogs\/","name":"Hexnode Blogs","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.hexnode.com\/blogs\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.hexnode.com\/blogs\/#\/schema\/person\/563c22c24d13be3fb41c0bd346fdc6c7","name":"Neil John","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hexnode.com\/blogs\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/63f298af21f8b0492f9743897e3f1719efa478254c7a1901aa7702d7cca8aad5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/63f298af21f8b0492f9743897e3f1719efa478254c7a1901aa7702d7cca8aad5?s=96&d=mm&r=g","caption":"Neil John"},"description":"Product Consultant @ Hexnode. Love to talk the talk and walk the walk.","url":"https:\/\/www.hexnode.com\/blogs\/author\/neeraj\/"}]}},"_links":{"self":[{"href":"https:\/\/www.hexnode.com\/blogs\/wp-json\/wp\/v2\/posts\/416","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hexnode.com\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hexnode.com\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hexnode.com\/blogs\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hexnode.com\/blogs\/wp-json\/wp\/v2\/comments?post=416"}],"version-history":[{"count":14,"href":"https:\/\/www.hexnode.com\/blogs\/wp-json\/wp\/v2\/posts\/416\/revisions"}],"predecessor-version":[{"id":19809,"href":"https:\/\/www.hexnode.com\/blogs\/wp-json\/wp\/v2\/posts\/416\/revisions\/19809"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hexnode.com\/blogs\/wp-json\/wp\/v2\/media\/1130"}],"wp:attachment":[{"href":"https:\/\/www.hexnode.com\/blogs\/wp-json\/wp\/v2\/media?parent=416"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hexnode.com\/blogs\/wp-json\/wp\/v2\/categories?post=416"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hexnode.com\/blogs\/wp-json\/wp\/v2\/tags?post=416"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}