Support of iPhone 3G - iphone-3gs

I have submitted one iPhone app 6 times, and in the requirement of the last/ current version, iPhone 3G is not supported anymore.
My question: Why do I lose this model?
I have some remarks:
Now, apps don't support the iPhone 3G anymore.
I made some searches, and I didn't find any news about it.
Before I submitted this version, I updated my XCode from version 4.0.2 (iOS SDK 4.3) to version 4.2 (iOS SDK 5).
Maybe during the submission, "Apple" checked the binary in order to check the version of my tools (which I built my app with).
And as the iOS 5 cannot be installed on iPhone 3G, I have lost this support.
I own an iPhone 3G in order to make compatibility tests.
And with XCode 4.2, I had trouble to debug my App with my iPhone 3G.
But, i found the solution: Add the architecture armv6 is not enough I need to put some weak links.
If I submit my app with these options "special 3G", will these options be take into account and the support will be back?
(see the edit)
"What's new" is I changed my Apple Account: I submitted my app with another account.
Maybe there are some options somewhere that I didn't see.
Edit: I forget a part maybe important: the version of iOS.
The minimum version of iOS for running my app is iOS 3.1.
And my iPhone 3G runs on iOS 3.X
And all troubles I had with XCode 4.2 and my iPhone 3G seem to be the version of iOS (3.X).
Maybe my app lost the support of iPhone 3G to be sure there is no problem with iOS SDK 5 and iOS 3.X
But, there are users with an iPhone 3GS running on iOS 3.X.
I made some tests with one iPhone 3GS running on iOS 4.0: I had no issues and no options to add in my project settings.
Thanks for your answer. The problem may be the version of my XCode.
Like I said, I have already added the architecture armv6. But with my iPhone 3G iOS 3.X, this is not enough.
Did you test only this setting with one iPhone 3G with success?
I should do:
Add the architecture arm6
Set the Base SDK with "Latest iOS" (iOS 5.0)
Set the iOS Deployment Target with the minimum value
--- It's what you advice ----
Remove into the info.plist the parameter "Required device capabilities" (armv6 and armv7)
Add SystemConfiguration.framework as Optional (to make a weak link)
With this settings, my app crashes: "dyld: Symbol not found: __NSConcreteGlobalBlock"
So I should also add in the flag "Other Linker Flags", - weak_library /usr/lib/libSystem.B.dylib
This is one of my questions:
If I submit my app with these options "special 3G", will these options be take into account and the support will be back?

By default, Xcode 4.2 does not include support for the iPhone 3G, but you can add it back. Just select your app target and select "Build Settings". At the top, change the Architectures listed from "Standard (armv7)" to "Other". In the pop-up box, select the existing option and click the minus button, then click the plus button and add "armv7", then again click plus and add "armv6". armv7 will support the newer chips, while armv6 will add back in support for the iPhone 3G... providing you set your iOS Deployment Target to iOS 4.2 or earlier... your setting at 3.x should be just fine—that merely limits you to not using newer features of iOS obviously.
You may also need to add "-mno-thumb" under "Other C Flags" in the Build Settings, though if my memory serves me correctly that may only have been if you are wanting to use Automatic Reference Counting on the old architecture—and even then only because this is a work-around for a known bug.

Related

although ios 6.1 as base sdk xcode 5 build ipa for ios 7

i changed the base sdk for iOS 6.1 in xcode 5 .
When i simulate my project on a iOS 6.1 simulator or on a iOS 6.1 device
all works fine. But when i build a ipa and install it on a iOS 7 device
the device use the iOS 7 sdk and my hole app looks weird. I changed my base
sdk for iOS 6.1, so why use my device the iOS 7 sdk?
I read that iOS 7 use the iOS 6.1 sdk for old published apps.
What do i have to do that iOS 7 also do that for my app?
My only idea is to install xcode 4 again...
I have experienced the same problem - unfortunately only discovered AFTER submitting to the app store and the app being approved and released, causing all sorts of mayhem due to interface glitches.
The issue occurs due to a bug in XCode 5 (including in XCode 5.0.2 it seems) that is triggered when you install older SDKs.
When you have multiple SDKs installed, you will see that when you connect your device to XCode, there are multiple entries for your device, with no way to tell them apart. But it appears that the TOP entry is for the OLDEST SDK you have installed, the BOTTOM one for the NEWEST SDK.
I have found that if I first use "Test" project option to run the app on the device with the SDK I want to use (in my case the top entry, which is for iOS6.1 SDK), then that is the SDK that will subsequently be used when I archive the app.
You can have both xcode 5 and 4.6.3 installed.
Also a lot of post say that in the simulator it look iOS7 but on device it will look iOS6.1 if you set the base sdk to 6.1
see:
Is it possible to install iOS 6 SDK on Xcode 5?
Do apple allow custom iOS 5/6 style UI for iOS7?

iPhone Simulator versions below 6.0 no longer appear in Xcode 4.5 scheme drop down

Newbie questions. While learning Objective-C using Xcode 4.5.3 and the book Programming In Objective-C 4th edition, I have reached the final chapter in which two iPhone apps are built. Before building the apps I downloaded iOS simulators 4.1, 5.0 and 5.1.
When I built the first simple iphone app I was able to select iphone 5.0 simulator in the scheme. When I built the second, more complex app I tried to change the scheme which had defaulted to iPhone 6.0 simulator back to iphone 5.0 simulator only to find that that no simulator below 6.0 is available in the drop down any longer.
Having shrugged my shoulders and allowed the launch of my app in the 6.0 simulator I found that one row of the buttons do not display properly in the simulator. This row appears on top of another row with their labels blank or '-'. The xib for this project was created entirely visually according to the book's instructions as I do not yet know how to programatically code the user interface.
I have two questions:
How do I test this app in the iPhone 5 simulator if this scheme is no longer available in the scheme menu;
Why does the iphone 6.0 simulator fail to resemble the xib?
First of all, be sure that you have the Simulator downloaded for 5.0 and 5.1, for this, go to "Xcode -> Preferences -> Downloads", and you will see it there.
If you have them, the next step is to check that your project is deployed in those versions. For this, go to your project properties (click in the project in the project navigator) and check the Property "iOS Deployment Target" in the Info tab.
Next step, in the same screen click in your target and check the tab "Build Settings", and check the property "Base SDK" to see which iOS version you have there.
Let me know how it goes!
This is in answer to my second question:
Why does the iphone 6.0 simulator fail to resemble the xib?
Autolayout. Once this option is unticked, display is as expected.

Library not loaded

I added Social.framework in my application in the same way i use to add the other frame works. I have downloaded xcode 4.5 and iOS 6 . but my application crashes with follwing error only on device. It works fine on simulator.
dyld: Library not loaded: /System/Library/Frameworks/Social.framework/Social
Referenced from: /var/mobile/Applications/FC88291D-2052-45D6-A7BB-65CE340F07BF/Uploading Image.app/Uploading Image
Reason: image not found
I was getting this exact error. My app currently has a deployment target of 5.1. I wanted to add Facebook sharing. I found this old post, Conditionally including a library for different iOS SDK versions?. All I did was set "Social.framework" to 'optional' and it did the trick, then my app would run on ios 5.1 and ios 6.0. Of course you need to do checks at runtime for what OS the device is running otherwise you could run into a crash if you try to access social.framework in ios 5.1 or earlier. Hope that helps!
In Xcode go to targets, Go to build phase and search for Social frame work you will find that under "Link Binary with Libraries" section. There select social frame work and see there is an option on right hand side required/optional in that just change required to optional. Now you are able to run on all ios devices without any crashes.

Cannot deploy an AIR application to an iPod Touch

I'm using Flash Builder 4.5 with Flex SDK 4.5.1, and when trying to deploy an app to a 2nd gen iPod Touch with latest available iOS I get an error saying the app is not valid, and according to some Adobe sites, only 1st generation iPods aren't supported. The application works fine in an iPhone.
Should I change some setting, update to AIR SDK 3.1, or am I wrong thinking my app should work on this device despite Adobe's pages?
From what I managed to gather a week ago, Adobe dropped iPod Touch 2ng Gen support with AIR 2.6 (or even 2.5, I don't know for sure).
However, one may be able to compile a Flex Mobile project targetting an old AIR SDK version (or a more recent one if you can target Flash 10.1), and then use PFI (the old packager for iPhone before it was combined with ADT) so your application works with older iOS devices.
Sadly, my current project is forced to use ANE, so I guess I must forget about supporting old devices.

Can I build for 4.x simulator but run in 3.x simulator?

Ok, there have been some questions alluding to this before, and I've even read some second-hand reports of people successfully doing this, but so far I haven't found a concrete answer.
Basically, I want to build an application for simulator using iOS 4.x, and then run it on a 3.x simulator.
I have both SDKs installed, so all I need is the last mile of getting the app to show up in the 3.x simulator.
I tried just copying the app across from Library/Application Support/iPhone Simulator/4.2/Applications to Library/Application Support/iPhone Simulator/3.0/Applications but it doesn't show up when I load the 3.x simulator. There's a binary plist called applicationstate.plist, which I'm guessing keeps track of what apps are installed on the simulator, but I don't know what the binary format is so I'm kind of stuck at this point.
Has anyone managed to load a 4.x app onto a 3.x simulator? And if so, how did you do it?
Why are you even trying to do this? What are you trying to achieve? If what you really just want to do is ensure the app works on iOS 3.x then simply state that in xcode and don't worry about the actual simulator. The simulator could be running iOS 5.0 for all you should care as long as you have set 'iOS Deployment Target' to '3.0' in xcode's project settings. That will ensure the application is compatible with iOS 3.x and above. Obviously you then still need to ensure you're not calling methods from SDK 4.x when it will run on an iOS 3.x device. If that is what you're trying to test then what you're doing won't actually work. You should (as Apple advises) always grab hold of a real device running the target firmware version and test it on that. Grab an old iPod for example with iOS 3.x and try testing your app on that to ensure you haven't called iOS 4.x methods when running under an older firmware.
The answer is: No, you cannot build for 4.x simulator and run on a 3.1.x simulator or earlier due to fundamental changes in the way the simulator works.
The only way to test 3.x support is to either run it on a 3.x device (after setting min deployment target), or build on an older xcode that supports 3.x simulator (which isn't feasible if you use Xcode 4, except for iPad 3.2).
Note: Setting the deployment target does not test compatibility with older operating systems. It's the operating system that it actually RUNS on that matters (such as "iPhone 4.3 Simulator", "iPhone 4.0 Simulator", "iPad 3.2 Simulator", or an actual device).
Of course, now that 3.x users make up less than 10% of the total population, it's not really worth the trouble to support it anymore.