Phonegap App doesn't run on iOS7 - iphone

I'm really having troubles to build&run my App on the iPhone 5S.
I use Cordova 2.5.0 and XCode 5.0
I'm getting these 10 Errors when trying to build&run on the iPhone
http://www.looks-familiar.com/stacko.html
also i added a screen of my Architecture Setting - maybe the problem is somwhere there
http://www.looks-familiar.com/stacko2.html
I changed the armv7 to "standard architectures (including 64bit)(armv7,armv7s,armv64)
Was this right, or do I have to change the settings somewhere else?

You should use those settings: Printscreen
I hope this helps.
I'm not sure how phonegap 2.5 will behave so if you still have problems maybe you should try to upgrade to at least 2.9.
If you don't have these settings is because this is a bug from a old version of Phonegap with a new version o XCode (4.5 upwards) as this issue states: https://issues.apache.org/jira/browse/CB-1360
On the comments of the issue you see that you have to manually edit the file in order to add these settings.
Because the issue is a bit old you also should include: "ARCHS[sdk=iphoneos7.*]" = "armv7 armv7s";
I had problems with armv7s and old version of Phonegap so my look like this:
ARCHS = armv7;
"ARCHS[sdk=iphoneos*]" = armv7;
"ARCHS[sdk=iphoneos6.*]" = armv7;
"ARCHS[sdk=iphoneos7.*]" = armv7;
"ARCHS[sdk=iphonesimulator*]" = i386;

I've just had the same issue (but with the latest Cordova 3.1), and the cause of the issue for me turned out to be the "Build Active Architecture Only" setting, as described here: https://stackoverflow.com/a/17327694/1801118
Although in my case, I found that it also works fine when set to "Yes" for Debug, as long as the settings in both the main project and the CordovaLib sub-project matched (one was Yes and one was No originally, which caused the problem).
My Architectures setting (on both projects) is set to Standard architectures (armv7, armv7s) - I haven't been able to try the 64bit setting as I'm still targetting iOS 5.

Related

XCode 4.5 (4G182) + iPhone 5 iOS6 - Choose a destination with a supported architecture in order to run on this device

So I have a brand new app I created last night for iOS6, using XCode 4.5. I can properly develop on my iPhone 4 with iOS6.
Today I got my new iPhone 5 with iOS6 and, after updating the certificates with the new device UUID, I tried to run my app on it and got this error:
XCode cannot run using the selected device. Choose a destination with
a supported architecture in order to run on this device.
I've enabled the device for development. Both armv7 and armv7s are on the settings.
I have included the sources from the Facebook 3.0 SDK and the linker flag '-lsqlite3.0'. I'm guessing the issue has to be related, but cannot figure what is wrong.
Any ideas how to solve it?
PS: The issue happens too when running the app on the simulator. No idea what changed on my project or XCode between last night and today, other than I have a new device and new certificates.
The selected destination does not support the architecture for which the selected software is built. Switch to a destination that supports that architecture in order to run the selected software.
Also you need to select the compiler LLVM in
Project --> Build Settings --> Build Options
I have found the same issue while running an OLD project on XCode 5.0 and My solution is:
You need to do following steps for getting out with this:
1. Set Valid Architectures : armv7,armv7s
2. Set compiler as LLVM in Project ---> Build Settings ---> Build Options.
3. Set Base and Deployment sdk properly.
This is my solution. Happy To Help.
You need to add armv7s to your valid architectures under your Target's Build Settings.
You included src/Framework/Resources/Info.plist when added Facebook SDK files to your project. Just remove it from your project and everything will work again. Guaranteed! :)
I have solve the problem using the below steps.
Close the Xcode
Delete the application from device
Restart the device
then re-run the application
it is working fine..
Make sure the bundle name (in plist file) is same as the project name. I changed it and it worked.
One of my 3rd party libraries couldn't run on armv7s so I removed that option. I also removed armv6 and kept armv7 as the only option. It built and ran on the phone with only armv7.
I have solve the problem using the below steps.
Close the Xcode
Delete the application from device
Restart the device
then re-run the application
it working fine..
I faced this problem because Build settings-> Complier for C/C++/Objective c was set wrong.
So I changed it to default compiler available, it worked!
Just need to select the compiler LLVM in
Targets --> Build Settings --> Build Options
I ran into the same problem. When I check the compiler it is showing incompatible compiler. you need to make it valid one. To set valid compiler follow the steps
select your
project----> build settings-->
on the search bar type compiler and search
now you can find build options under build options you will find compiler for c/c++/objective c set it to valid one.
So basically I created a new project, copied all the sources and everything seems to work fine. At least the app runs.
I am not sure which setting was causing the problem.
I had an issue with an out of data library that was built for iOS 4.x and I was building a new app for iOS 6 with iPhone 5 support. I received this error and the only way I resolved it was to make armv7 the only architecture and valid architecture listed in my project and target build settings.
remove info.plist refrence. And then re-drag info.plist to proj but don't copy to "target"
You just goto Build setting Then valid architecture Replace armv7 armv7s instead of armv7 .Then it will work fine .
Ok, not sure if this is the Problem in Your Project. But what fixed it for me, was to change the Name of the Info.plist File.
I changed the name from Info.plist to my-project-info.plist
also change it under target-build-settings/Packaging/Info.plist
Than delete the App from Devices/Simulators and re-run the App through Xcode
In my Case, everything worked fine since than. In my Case there was nothing wrong with the specifications made in the plist file or with the valid architectures.
some times this happens when your project was build in xcode 4.5 and you are trying to run in xcode 5.0.
so in my case I found the solution.
Change your compiler for C/C++/ObjectiveC Go to Build
Settings->Build OPtions->compiler for C/C++/ObjectiveC; select
Default(Apple LLVM5.0)

App crashes with 4.2 iPhone simulator 'set start-with-shell off'

I'm writing application which perfectly works on 4.0/4.1 iPhone simulator, but not 4.2.
I'm getting such warning:
Detected an attempt to call a symbol in system libraries that is not present on the iPhone:
fcntl$UNIX2003 called from function get_socket_nonblocking in image TestApp.
If you are encountering this problem running a simulator binary within gdb, make sure you 'set start-with-shell off' first.
How to set 'set start-with-shell off' on Xcode? I'm tried to add this line to .gdbinit but without luck.
With 4.0/4.1 SDK iPhone Simulator prints warnings about attempt to call symbol that is not present on the iPhone in debug window, but app don't crashes. Using using 4.2 app crashes. How to prevent 4.2 crashes ?
Thanks
before this cleanAll build then
In xcode go to Project > set active executable > appname - Iphone 4.0 simulator
then open simulator then go to Hardware > version > 4.0.2
then double click urapptarget and in build tab change "ios deployment target = 4.0"
now run in simulator it will work
File a bug via http://bugreporter.apple.com/
The debugger within Xcode will read ~/.gdbinit just like gdb at the command line. Try adding that line to ~/.gdbinit.
I had a similar problem with a version of libCURL that was built for an earlier OS. The solution was to rebuild the library under iOS 4.2 to eliminate the $UNIX2003 symbol decorations. (I wrote up the full details at http://www.creativealgorithms.com/blog/content/building-libcurl-ios-42.)
I was also unsuccessful adding the line to ~/.gdbinit. At the risk of stating the obvious: if you set the simulator version to 4.1 within XCode, you'll avoid the issue. This is what I do now - which is fine as long as I don't need to test an API available only on 4.2 - which we do not (we still target iOS 3.0).
I encountered a similar error:
Detected an attempt to call a symbol in system libraries that is not present on the iPhone:
pthread_rwlock_init$UNIX2003 called from function ...
I was able to fix by unchecking the 'Strip linked Product' Deployment Build Setting of the Project, ie STRIP_INSTALLED_PRODUCT = NO
Don't forget to do a full clean before rebuilding.
You probably only want to do this for the simulator. Filling a bug report is still a good idea.
If you are using native libraries, you should recompile them using iOS4 (only the i386 versions, as it works on the device).
The $2003 suffix is generated by the compiler under some circumstances which you can find fully documented in the manual entry for compat
man compat
I wrestled with this for some time before finally fixing it by setting
-mmacosx-version-min=10.3
Any version prior to 10.4 will do the job.
Hope this helps.

How to make Xcode 3.2.3 build a specfic architecture?

I'm getting the following error when including static libraries:
missing required architecture i386 in
file
This worked 30 seconds previously, and only failed when I upgraded to Xcode 3.2.3. I've used "file" command to check - and, yes, XCode is building completely the wrong architecture (armv6 + armv7 instead of i386).
This seems to be a major bug in latest Xcode, where Apple has re-written the build / compile / link settings. There's a note in the release notes saying very vaguely that they've "Changed it" because it used to be "confusing". This is not helpful.
The build settings for the library VERY clearly say:
"Valid architectures: i386"
There's no confusion here - Xcode is building something other than what the target says it should.
The question is: how do you un-break this? How do you force Xcode to do what it's supposed to? I've re-installed Xcode from scratch, cleaned everything, and manually inspected the build files. There's nothing wrong (and, of course, it worked perfectly in xcode 3.2.2)
After considerable research, I believe the answer is:
"this is now impossible - Apple has deliberately hard-coded XCode to ignore build settings"
However, I've come up with a script that automatically builds ALL platforms of a project (which you HAVE to do with static libraries - you don't have much choice now, because Apple has disabled Targets), and the script could easily be modified to do all targets, instead of all platforms:
Build fat static library (device + simulator) using Xcode and SDK 4+
Right click on your Target app under Targets and make sure that the Base SDK is set to iOS.

Older SDK disappeared after installing new Xcode version

Why are old SDKs beeing removed when installing a new version of xcode with new Iphone SDK ?
Now we have v4, what settings do I have to make in order that the apps still work with 3.x ?
Thanks
Set the Base SDK to 4.0 and Deployment Target to 3.x. Or, in modern conditions, the Base SDK to Latest and Deployment Target to whatever you need.
Although 'Zoul' has most succinctly answered the question, I shall make an attempt to elaborate on the 2 settings and point to some useful documents which will help others who are new to the situation.
Base SDK Version: This indicates the version of the SDK based on which the program has been compiled. This can be set from the "Build Settings" for the project or target. You can use API code from Apple in your code introduced up-to that version and compiler will know all the symbols and compile without any issues.
Deployment target: This is a declaration from your side about the minimum iOS version which should be installed on the user's device to run your code. This setting can be found under "Info" section for Project and "Summary" section for a particular target. Now, important thing to understand is that your code will not automatically run smoothly on devices with older versions of the iOS if you are using API code introduced in later version by Apple. These can be new classes/methods/frameworks introduced by Apple in later version. You have to ensure by writing necessary conditional code and provide alternate code path to gracefully degrade for older iOS version which does not have the newer API. It is up-to you to handle version incompatibilities.
Apple documentation on the subject can be found in "SDK Compatibility Guide".
To know about the changes with different versions of iOS refer "What's new in iOS".
This topic is also discussed in "iOS Development Guide" under section "Building and Running Application". Refer sub-section "Specifying the Runtime Environment".
If you have backups of your system from something like Time Machine (and you better!) you can copy the older SDKs from the backup located at /Developer/Platforms/iPhoneOS.platform/Developer/SDKs and /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs - then just restart XCode and you're ready to go.
If you still have the problem after you set Deployment target at least as low as your desired SDK, then you need to download that SDK. Luckily, Xcode helps us here also:
look after Simulator selector in top left of your Xcode and select More Simulators. It will open a page like the one below:
just select the SDK you need to test your app against.
3.2.3 last beta did remove all other SDK's cause to many people tried publish Apps developed with the beta SDK, which will not be accepted. I guess GM is doing still the same
If you want to develop for 4.0,3.2 and 3.0 (plus 3.0,3.1,3.1.2,3.1.3)
do the following
sudo /Developer/Library/uninstall-devtools –mode=all (This will uninstall the current XCode installation)
Then install first old XCode (3.2 final) in default folder (/Developer)
Then install the new XCode (3.2.3 GM) in other folder (/DeveloperBeta)
This way you will have both. And can launch xcode from either /Developer/Applications/Xcode.app or /DeveloperBeta/Applications/Xcode.app

Missing frameworks after upgrading to Xcode 3.2

I upgraded to Xcode 3.2 and now can't seem to add a number of frameworks, specifically the media player. A number of frameworks do not show up on the "Add Existing Frameworks Sheet".
Per another question I tried setting the "Framework Search Path" to
$(SDKROOT)/Library/System/Frameworks
but that didn't seem to make any difference. The UIKit.framework that is included by default when I create a new project is in
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library/Frameworks
which I would expect. If I navigate to that directory I see the MediaPlayer.framework and can drag and drop it into my project successfully, but can only build and debug for a device-no suprise there, but not ideal.
I uninstalled the dev tools with
mode=all
and reinstalled Xcode, but still no relief. Any help would be greatly appreciated.
Your project was probably configured to use an older SDK that's not included in the Xcode 3.2 + iPhone SDK package. Go to your target's Get Info panel, Build settings, and set the Base SDK to an SDK that's actually installed.
If you want your app to run on older iPhone OSes, set the iPhone Deployment Target build setting to the earliest OS you want to run on.
I just had the same issue when upgrading to 3.1.2. One thing you will want to do is open your Xcode Project, right-click on the project and Get Info... Then change the Base SDK for All Configurations to (the minimum of) 2.2.1.
When I did this it re-linked all of my RED (missing) Frameworks. Cheers!
I know this question is over a year old, but I just had a similar problem and solved it by looking for the missing framework in the trash and putting it back.
I must've deleted it by accident!
Possible Solution 1: Clean Your Project
Build > Clean All Target
Possible Solution 2: Make Sure Your Device is in Correct Firmware
To debug, read console log.
Hope it helps.