Possible Xcode Validate Settings Bug - ios

I wrote an app originally for iOS 6, and I have since updated it to work on iOS 7. Now I want to build it to support the 64 bit iPhone 5s as well. In my project I switched the Architectures Build Setting to Standard architectures (including 64-bit) (armv7, armv7s, arm64). Upon build Xcode prompted me to validate my settings, and told me to let it automatically choose the architecture. I let it do this, however it switched it back to the default, Standard architectures (armv7, armv7s).
I looked for an answer on google but found no clear explanation.
I decided to ignore Xcode's warning, and fixed my app to support 64-bit and it built successfully (leaving the setting on Standard architectures (including 64-bit))
However I hated the feeling of going against Xcode's advice, so I created a new project as a test. I found that the default architecture build setting of a new project was Standard architectures (including 64-bit). I then clicked validate settings and found that even in this brand new project with nothing else changed, Xcode still wanted to change the architectures back to regular Standard architectures.
Is there a reason why Xcode is changing the architectures back, or is this a bug in the validate settings?

Related

How to Update My Project Settings to Support iOS 5.1.1 or Later?

This has to be one of the simplest fixes. There must be something I'm just not seeing/getting.
I am in the process of converting my app to 64-bit so that I can deploy it to the app store. I got the warnings in my project and updated them like Xcode asks. However, I don't know how to update my project settings to support iOS 5.1.1. I just can't find that area.
I presume this is the reason why I cannot set my Architectures to “Standard Architectures (including 64-bit).” Instead, I only have the option of "Standard architectures (armv7, arm64) - $(ARCH_STANDARD)"
How do I resolve this?
Select your Project in the Project Navigator,
Select the Info tab, and then
Set the iOS Deployment Target to the version of iOS you want to target (in your case 5.1).
Im pretty sure that you can't simultaneously support 64-bit and pre-ios6...

Error creating LLDB target at path, Xcode 6 GM seed

I'm getting this error whenever I build in Xcode 6 GM Seed. It seems to be making my app insanely slow. What exactly does this mean and how do I fix it?
I had the following error:
Warning: Error creating LLDB target at path '.....'- using an empty
LLDB target which can cause slow memory reads from remote devices.
PS: im not able to run my app, its stuck on the splash screen
There is a thread in the Apple Developer Forum, https://devforums.apple.com/message/1010068#1010068 that describes how to diagnose this issue. I had his issue for Xcode 6 GM Seed, specifically - Version 6.0.1 (6A317). This isn't necessarily a solution, but it may help some people get a better diagnosis
Useful steps are as follows -
1) Create or modify your ~/.lldbinit and add log enable -f /tmp/lldb-api.txt lldb api to it.
2) Rerun your debugger session (no need to restart Xcode or anything)
3) Inspect the file at /tmp/lldb-api.txt. Look for a line beginning with SBDebugger::CreateTarget(...). Mine looked something like this
SBDebugger(0x7f83671fd600)::CreateTarget
(filename="/Users/xxxxxxx/Library/Developer/Xcode/DerivedData/Dino-gjuxikhuyokkqufeqmesmgjcxylu/Build/Products/Debug-iphonesimulator/Dino.app",
triple=x86_64, platform_name=(null), add_dependent_modules=1,
error=the specified architecture 'x86_64' is not compatible with
'i386-apple-ios' in
'/Users/xxxxxxx/Library/Developer/Xcode/DerivedData/Dino-gjuxikhuyokkqufeqmesmgjcxylu/Build/Products/Debug-iphonesimulator/Dino.app/Dino')
=> SBTarget(0x0)
4) Inspect the target file from the above log output, in my case -
file
"/Users/xxxxxxx/Library/Developer/Xcode/DerivedData/Dino-gjuxikhuyokkqufeqmesmgjcxylu/Build/Products/Debug-iphonesimulator/Dino.app/Dino"
/Users/apanagar/Library/Developer/Xcode/DerivedData/Dino-gjuxikhuyokkqufeqmesmgjcxylu/Build/Products/Debug-iphonesimulator/Dino.app/Dino:
Mach-O executable i386
5) So, In my case my problem was the architectures I was building for. The target architecture for your project should match the one on the SBDebugger::CreateTarget() line in the log output.
Xcode doc's point out the following. I had to go through my nested frameworks and change some outdated architecture targets -
NOTE ABOUT 64-BIT ARCHITECTURE
An app extension target must include the arm64 architecture in its
Architectures build settings or it will be rejected by the App Store.
Xcode includes this architecture with its “Standard architectures”
setting when you create a new app extension target.
If your containing app target links to an embedded framework, the app
must also include the arm64 architecture or it will be rejected by the
App Store.
For more information about 64-bit development, see 64-Bit Transition
Guide for Cocoa Touch or 64-Bit Transition Guide for Cocoa, depending
on your target platform.
https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionCreation.html#//apple_ref/doc/uid/TP40014214-CH5-SW1
I am not sure if this will help in your case. But I tried this solution and it worked pretty neatly for me.
Pull up the terminal and type - rm -rf ~/Library/Developer/Xcode/DerivedData
This is supposed to remove the huge stack of DerivedData folder and make the app execute faster.
Did you use Architectures=$(ARCHS_STANDARD_32_BIT) and run your app on a 64 bit device? (iPhone 5S or iPhone 5S simulator)
Apple seems to be stricter with apps which don't support 64bit. So if there is no specific reason, I think it's better to include arm64 in your build architecture
NOTE ABOUT 64-BIT ARCHITECTURE
An app extension target must include the arm64 architecture in its
Architectures build settings or it will be rejected by the App Store.
Xcode includes this architecture with its “Standard architectures”
setting when you create a new app extension target.
If your containing app target links to an embedded framework, the app
must also include the arm64 architecture or it will be rejected by the
App Store.
For more information about 64-bit development, see 64-Bit Transition
Guide for Cocoa Touch or 64-Bit Transition Guide for Cocoa, depending
on your target platform.
Source:
https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionCreation.html#//apple_ref/doc/uid/TP40014214-CH5-SW1
This warning is solved by changing Build Settings :
Select Project -> Build Settings
Change 'Architectures' to 'Standard architectures (armv7, arm64) - $(ARCHS_STANDARD)'
This will prompt an alert stating iOS 5.1.1 and above are supported. Click 'Change Deployment Target to 5.1.1'
Repeat steps for Target (if not changed automatically)
Also, this is preferred build setting since Apple is forcing developers to build apps on 64 but architecture. Apple document Link

XCode 5 dependencies warning - confuses iOS deployment targets and architectures

I've searched here, read 9 answers that don't apply, validated my settings, checked them manually, cleaned, rebuilt and archived. I've also tried adding armv6 to Deployment Targets, same thing. The app runs fine on physical Iphone 4 and 5 devices, but I can't publish it...
Dependency Analysis Warning: iOS deployment targets lower than 4.3 are not supported (current IPHONEOS_DEPLOYMENT_TARGET = "4.0", ARCHS = "armv7").
(NOTE: After some thinking and testing, the basic problem is at the bottom of this question.)
Build Settings:
Architectures: Standard (armv7, armv7s)
Base SDK: Latest (iOS 7.0)
Supported platforms: iOS
iOS Deployment Target: iOS 5.1
Targeted Device Family: iPhone
Info.plist:
Iphone environment: Yes
no deployment target entry (which is what caused the warning in the linked answers)
But I still get the warning.
As you can see, this different from the Build Settings. I click the warning, but it doesn't tell me what could tell XCode to override the Build Settings, so I can do nothing about that.
How do I begin to fix this, where to look, what to check?
EDIT: In other words, this and this doesn't apply, since I don't build for deployment target lower than 4.3. I just need XCode to use the actual deployment target and architectures set in Build Settings.
UPDATE: So this is the issue I seem to be having: I added Required Device Capabilities armv7 (only) in the info.plist, and Apple forbids me to introduce such a requirement for apps that didn't have them (users couldn't upgrade). But then it would be nice of Apple to let me build for such users...
Unless it's just the bit about XCode not reading the targets right that prevents me from doing so.
--> So the question becomes: is there a way to force set IPHONEOS_DEPLOYMENT_TARGET to something >= 4.3?
There are couple of things you can do to see if this fixes your problem.
Do a clean build
XCode --> Product --> Clean
Close XCode
Go to your Derived data dir and remove everything from there
~Library~/Developer/Xcode/DerivedData
4- This maybe a redundant check. Though you have set your target to 5.1 check this anyways.
5- Launch Xcode and try your build again.
Even though I knew I hadn't typed the string IPHONEOS_DEPLOYMENT_TARGET in any of my sources, on a whim I searched for it in the project manager. Turns out that XCode does not use the settings displayed when clicking on the project in the project manager for compiling the app...
The only way I could get to the hidden setting that somehow overrode the visible setting was to click on the search result.
So, if you get this warning: iOS deployment targets lower than 4.3 are not supported, do this:
Cmd+Shift+F, search for IPHONEOS_DEPLOYMENT_TARGET.
Click search results with a target < iOS 5.0 (to go to the hidden Build Setting).
Set them to at least 5.0.
Note: Do not add armv6 to Architectures, set it to Standard (armv7, armv7s).

iPad Build Settings

I am finding conflicting information about the armv of an iOS application. I am creating an iPad only application. The application should be able to run on all iPads (all three generations). The application has 5.1 as its deployment target.
I did not bother about all this until Xcode 4.5 showed up. I updated my Xcode (and hence the iOS simulator got updated as well to 6.0) when suddenly my application stopped working. I figured out setting the 'Build Active Architecture Only' to 'Yes' allowed me to continue programming. I cannot stand the fact however to change settings without exactly knowing what they do. That's why I am stuck with following questions:
Does armv7 cover all iPad generations?
How come my application throws 'file is universal (4 slices) but does not contain a(n) armv7s slice' when setting 'Build Active Architecture Only' to 'No'? (This is when testing on a iPad 1.) Because I thought setting it to 'No' means you are generating a fat binary.
Which settings do I need eventually to run on all iPads? Are there multiple configurations possible (I assume not), and so, which are preferred?
Current settings are:
Architectures: Standard (armv7, armv7s)
Base SDK: Latest iOS (iOS 6.0)
Build Active Architecture Only: Yes
Valid Architectures: armv7 armv7s
Thanks for reading if you made it till this point.

"Warning: iPhone apps should include an armv6 architecture" even with build config set

It's been a while since I've had to adjust project build settings. After upgrading to a recent SDK I'm having trouble building my ad hoc distribution configuration.
Build generates this warning and error:
warning: iPhone apps should include an armv6 architecture (current
ARCHS = "armv7")
iPhone/iPod Touch: application executable is missing a required
architecture. At least one of the following architecture(s) must be
present: armv6 (-19033)
However in my project I thought I had things set correctly:
Architectures is: Standard (armv6 armv7)
Base SDK: Latest iOS (currently set to iOS 4.2)
Valid Architectures: armv6 armv7
I have cleaned all targets.
I appreciate any tips.
If using Xcode 4.2 or higher, try the following:
Click your Project name (in the left column), followed by the Target:
Click the 'Build Settings' tab (in the right column):
Click the 'Release' or 'Distribution' row under 'Architectures', and choose 'Other...':
Double click the highlighted row named '$(ARCHS_STANDARD_32_BIT)' in the popover that appears, and replace it by typing 'armv6'. Then add a new row with the plus button in the bottom left of the popover, and type 'armv7', then click Done:
Update: you should add armv7s to target the iPhone 5 as well. (And drop armv6 if building with Xcode 4.5 or higher, which no longer supports armv6.)
That's it. You should now be able to build/archive without generating errors.
If it still doesn't work, see this answer from justinxreese, which suggests adding entries for armv6 and armv7 under "Required Device Capabilities" in your info.plist file.
If you uncheck "Build Active Architecture Only", then it will build all the valid architectures.
Update: This is no longer applicable as of Xcode 4 - follow Nick's instructions for Xcode 4 and later.
I had this problem even after following the accepted answer and found the following to work:
In your Info.plist, add an entry for Required Device Capabilities. This should be an array and will have two entries.
Item 0 : armv6
Item 1 : armv7
It will look like this:
In addition to Nick's answer about Xcode 4.2, you may also need to review your info.plist file. It seems as if new projects started in Xcode 4.2 by default specify 'armv7' in the 'Required Device Capabilities'. You'll need to remove this if wanting to support devices that run armv6 (e.g. the iPhone 3G).
Delete armv7 from the 'Required device capabilities' in yourProjectName-Info.plist
An ios 6 update
Changes in Xcode 4.5.x for ios 6
Xcode 4.5.x (and later) does not support generating armv6 binaries.
Now includes iPhone 5/armv7s support.
The minimum supported deployment target with Xcode 4.5.x or later is iOS 4.3.
I had this problem too. I just set my deployment target to 4.3 and left only armv7 architecture and it worked. At point almost everyone has 5, so 4.3 is fine.
for me it not work with every answer. but I try TARGETS > Architectures > Debug and add a new row with the plus button, and type 'armv6'(with out '), then click Done.
and finally CMD+B and then right click at PrjectName.app(in Products folder) > Open in Finder > Compress "PROJECT_NAME.APP" (in Debug-iphoneos) > Upload to AppStore
it's my screen setting.
if you have include project please config it all.
Hope your help.
After trying a mixture of these answers, I finally stumbled across making it work. Im so pissed off at Apple right now. Just another hour they made me waste. Here is my config.
I tried all the answers above ,none resolved my question. So I create a new project and diff the build settings one by one. Only "Alternate Permissions Files" is different.
The project build failed has a value armv7. Delete it then clean->build->archive . Succeed!
Hope can solve you question
Wow, I update/submit apps about every 6 months. Every time I do this I have to learn the "new" way to do it...
Same problems as described above when running iOS 5.1, and Xcode 4.3.2
Thanks for the posts! I spent a while updating all of the project settings to armv6, armv7, but no joy. When I set "build active architecture only" to No I got a build error about putting both objects in the same directory.
Fortunately, I noticed you guys were modifying the target build settings instead. This is what finally worked (armv6, armv7, and setting "build active architecture only" to No under the Target build Settings). As a disclaimer, I had already set all of the architectures to armv6, armv7 in the project settings too.
Anyway, thanks for the help,
Brent
I had to be sure to change these settings in both the Target and Project settings on xCode 4.3.2 after doing that and setting it to build for both armv6 and armv7 everywhere I was able to submit my app.
For safe measure I also exited xCode between making the changes and doing a clean, build, archive cycle.
Quite a painful problem for me too. Just spent about an hour trying to build and re-build - no joy. In the end I had to do this:
Upgrade the base SDK to the latest ( in my case iOS 5 )
Restart xCode
Clean & Build
It worked!
I guess it's a bunch of jargon about arm6 , arm7 as it looked like my project was valid for both, at least the settings seemed to say so ) , my guess is this is a cynical way to bamboozle us with the technicalities, which we don't understand, so we just take the easy option and target the latest iOS ( good for Apple with more people being up-to-date ) ....
Here is Apple's documentation:
Technical Q&A QA1760
It says there are two things that you must get right:
Add armv6 to the Architecture build settings
Set Build Active Architecture Only to No.
If this still doesn't help you, double check that you are really changing the architecture build settings for the right build configuration – I wasted half an hour fiddling with the wrong one and wondering why it didn't work...
Select Edit Scheme... in the Product menu, click the "Archive" scheme in the left list and check the Build Configuration. Change the value if it was not what you expected.
Note; I had to perform these steps for both my base project, and the embedded PhoneGap .xcodeproj file in my application.
Yes, I embed PhoneGap; they update far to frequently, and I've got less than two months to know that a feature is depreciated.
Try changing your deployment target to something higher than an armv6 processor. The settings for xCode are referencing the operating system level, for instance: iOS version#{3.1, 3.2, 4.0, 4.1, 4.2, 4.3, 5.0, 5.1}
(i)You can set this in the build settings tab or the summary tab. Start at the top left of the window in the Project Navigator, with all the files listed in it. Click the top-most one which has a blue icon.
(ii)If you are planning on using the programmable shader line circuitry, which is accessed and controlled through openGL ES 2.0 API, then you should set your "Deployment Version" to about 4.3, which I believe is only available on devices such as the 3GS or newer. xCode is reporting that iOS 4.2.5 or higher is needed run armv7 code. And once again, this processor, I believe, started with the 3GS.* iOS 4.3 seems to be the choice for me, for now.
http://theiphonewiki.com/wiki/index.php?title=Armv7
http://en.wikipedia.org/wiki/List_of_iOS_devices
If xCode keep complaining about armv7, make sure you disconnect any connect device (especially iPhone 5!!) and try again. Took me hours to find out that little piece of information.
Using Xcode 4.2 on Snow Leopard, I used the following settings to build an app that worked on both armv6 (Iphone 3G and lower) AND armv7 (everything newer than 3G including 3GS).
architectures: armv6 and armv7 (removed $(ARCHS_STANDARD_32_BIT))
build active architecture only: no required device capabilities:
armv6
do not put armv7 in required device capabilities if you want the app to run on 3G and lower as well.

Resources