“Your binary is not optimized for iPhone 5” after I upload an app with xcode 6.0.1

I am getting this email after upload my binary with Xcode Version 6.0.1 (6A317)

Your binary is not optimized for iPhone 5 – – New iPhone apps and app
updates submitted must support the 4-inch display on iPhone 5 and must
include a launch image referenced in the Info.plist under
UILaunchImages with a UILaunchImageSize value set to {320, 568}.
Launch images must be PNG files and located at the top-level of your
bundle, or provided within each .lproj folder if you localize your
launch images. Learn more about iPhone 5 support and app launch images
by reviewing the ‘iOS Human Interface Guidelines’ at
‘https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/IconsImages/IconsImages.html#//apple_ref/doc/uid/TP40006556-CH14-SW5’
and the ‘iOS App Programming Guide’ at
‘https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/App-RelatedResources/App-RelatedResources.html#//apple_ref/doc/uid/TP40007072-CH6-SW12’.

  • Interface Builder could not open the document “.xib” because it does not exist
  • itunesconnect using application loader behind a firewall
  • How to add more localizations to my Xcode Project?
  • App running on iPad while its iPhone-Only
  • Submit New App Version in New iTunes Connect after Developer Rejection
  • Submission of ios app: invalid team id
  • Here is my plist file:

    enter image description here

    Here is my Xcode tree:

    enter image description here

    Here is my bundle root tree:

    enter image description here

    Here is the only resource I could find on this issue but it remains unanswered (3 days old)… https://devforums.apple.com/message/1051948#1051948

    8 Solutions Collect From Internet About ““Your binary is not optimized for iPhone 5” after I upload an app with xcode 6.0.1”

    We faced the same issue and couldn’t solve it after trying many solutions, we believe it’s a kind of bug in App submission.
    But we found a workaround which can keep launch images localized and pass the submission verification.

    Environment:

    Xcode 6.1 (6A1052c) with iOS 8.1 SDK

    Precondition:

    Have following properties in your “*-info.plist” file.

    enter image description here

    Steps:

    1. Go to your target’s settings and in our standard scenario (localize
      launch images, which uses “UILaunchImages” in “*-info.plist” but not
      image assets), it should look like the image
      enter image description here

    2. Change the setting to use image assets (Note: after this step, Xcode will automatically REMOVE the “UILaunchImages” properties in your *-info.plist file. So please BACKUP the properties first.)

    3. Go to the “LaunchImage” assets (can click the arrow button on the right) and fill with images from one of your *.lproj folder.
      enter image description here

    4. Now, go to the “LaunchImage” folder which contains images and “Contents.json” file.
      enter image description here

    5. Remove ALL the launch IMAGES just added, but keep the “Contents.json” (and it’s content) file.

    6. Check the “Contents.json”, it should contains properties like image below
      enter image description here

    Double check following items:

    • Localized launch images in resource folders (en.lproj, ja.lproj, etc.)

    • *-info.plist contains “UILaunchImages” properties

    • Project setting uses image asset for launch images

    • “Contents.json” in “LaunchImage” asset folder, and the folder DOES NOT really have launch images

    Now you can have a try for localized launch images and submit the binary to iTunes Connect. In our App, the workaround did work for “localized launch images” and “submission successful“.

    It should be a trick for avoiding the bug in submission checking.

    Since the workaround above doesn’t change any resource, except making the checking thinks we use image assets, we are more convinced that there are some bugs in Apple’s checking.

    Cheers!

    This happened to me too. Since iOS6 (I think) if you localize your app you must be consistent all the way. You have English, Dutch, and French as languages as I see in the screen shot. You must have these languages EVERYWHERE you do localization. Your string localization files must have all these languages but not more languages.
    I got the same reply when I used AppiRater library for an app. AppiRater has messages in many languages and my app is localized only for 2 languages. So I had to delete all the other string files from AppiRater except the 2 that I needed.
    Once I did that everything went well.

    So the short answer is: delete any extra localization files that you don’t need to support and add localization files that are missing from your app.

    Cheers!

    Edit by danielgindi

    This actually works, despite some claims that this answer is irrelevant.
    It happened to me when I started using Base localization in an app, and it still had some resources localized in en.lproj folder, including the Default.pngs.

    So you can either make sure that you have the Default-568h@2x.png file in all of the localization folders that you are using – or delete localizations that you are not using.
    I have just moved everything to be in Base.lproj, so this way it’s clear what png it is taking, and there’s no duplicate.

    To Be more Clear:

    1. Change your launch image source to “Launch Image” (follow steps 1-3 in @Charlie Hung’s answer).

    enter image description here

    1. Right click on your project and select ‘Show in Finder’
    2. Find folder Assets.xcassets and open it
    3. Open the LaunchImage.launchimage folder and move your two images to your .Iproj folder which you’ll find in your project. (Mine was called Base.Iproj).

    Finally, add this to your info.plist (open in text editor):

    <key>UILaunchImages</key>
      <array>
        <dict>
          <key>UILaunchImageMinimumOSVersion</key>
          <string>7.0</string>
          <key>UILaunchImageName</key>
          <string>iOS7-Default </string>
          <key>UILaunchImageOrientation</key>
          <string>Portrait</string>
          <key>UILaunchImageSize</key>
          <string>{320, 480}</string>
        </dict>
      </array>
    

    This is all I had to do.

    In my case, I was updating an older app. It turned out I was missing an icon file named: launchiPhone5-568h@2x.png with dimensions 320×568. I found this by looking through the warnings. I created the file, added it to my project with the other icon files and it worked fine.

    Hope that helps someone 🙂

    Do what Charlie and Dan recommend AND make sure that your image file names don’t have any dashes in it. Mine didn’t work until I renamed the files as only alphanumeric.

    I got the same error, but in my case I didn’t had the storyboard (xib) file for the launch image, which is needed:

    “You use a launch XIB or storyboard file to indicate that your app runs on iPhone 6 Plus or iPhone 6.” (see here)

    I followed this tutorial to create it:
    https://developer.xamarin.com/recipes/ios/general/templates/launchscreen-xib/

    For step 9 of the turorial, in the Info.plist, I set:

    <key>UILaunchImageFile~iphone</key>
    <string>Launch Screen.storyboard</string>
    

    info.plist adding key launch image and string storyboard file

    Just to verify, when you run your app, you should see your launch screen image before it loads. After I did this, I was able to upload the app to the app store.

    Steps showed above in other answers are also important: “If you also need to support earlier versions of iOS, you can continue to supply static launch images in addition to a launch file.” (see here)

    Hope this helps.

    I got the same error in deployment environment 9.3 and swift 2.3 and in my case I didn’t had the storyboard (xib) file for the launch image, which is needed and my configuration was wrong in projects target settings, see the image link below:

    Picture of Settings

    Maybe this is useful for some guys: just change the iOS Deployment Target from 7.0 to 8.1 or higher.

    enter image description here

    I met this problem when I want to upload an app to app store built by react-native 0.37, and its default iOS Deployment Target is 7.0.