jenkins with iOS - ios

I am new to jenkins and I refer 4-5 links for integration jenkins with my iOS project. Right now I got successfully retrive repo from gitlab and after that pod installation is completed.
Now, as a configure xcode build configuration, it will give me error like -scheme is not available. I tried too many option and I select xcode scheme file as "Pods-projectname".
It will take successfully and at last give me error like You have to provide a value for either the marketing or technical version. Found neither.”
Now, I am confuse to configure jenkins with my project.
So, please some one help me to configure my project with jenkins that how can I build .ipa with jenkins. Right now I have mac mini and run jenkins as a localhost:8080.
Thanks in advance..!!

Related

XCode Swift package manager error behind proxy

We use Swift package manager embedded in XCode for the dependencies in our project. Everything works fine when using it on the local machine. However when I try to build the project on our ci slaves I get the following error (when run from both XCode and the console) :
xcodebuild -resolvePackageDependencies
Resolve Package Graph
Fetching https://github.com/hmlongco/Resolver.git
xcodebuild: error: Could not resolve package dependencies:
An unknown error occurred
The difference between running it locally and on the ci slave is that the ci machines are configured behind a proxy. We already whitelisted all the URLs that were accessed when running this command, however the problem still persists. I couldn't find any detailed log about this error.
From examining the network packages sent when I run the command we can still see that some app is trying to access the direct URL instead of going through the proxy and here timeout is received. We only use public packages on github and there isn't any authentication needed.
From other side if the project is set up the old way using Package.swift and we run:
swift package resolve the dependencies are successfully resolved without errors.
I have already gone through the following but there wasn't any helpful solution:
Configuration for enterprise networks
XCode proxy settings
SPM in real life projects
Same issue on developer forum
SSH error resolving dependencies - no ssh dependencies
Also there isn't any documentation about how resolving the packages through XCode is different than using 'swift package'.
Currently I'm not sure whether it's possible to configure something so XCode uses the proxy settings for SPM or the Xcode SPM through proxy is just not supported. Any ideas? Any help is appreciated!
From what I just found, at least for Xcode 12.4, there's -scmProvider option for xcodebuild:
-scmProvider which implementation to use for Git operations (system/xcode)
If I guess it correctly, -scmProvider system would force xcodebuild use "system" git. That, in turn, in my case, makes it respect the git config settings I have, particularly proxies.
Hence, answering the original question, it's probably worth trying
xcodebuild -resolvePackageDependencies -scmProvider system
(as long as Git config is properly set up)
Turns out there was an easy fix if we just configure the proxy for using it with git:
Getting Git to work with a proxy server - fails with "Request timed out"

How to upload android Apk file to fabric using jenkins

I built an Android project within Jenkins using Gradle. After a successful build a signed apk file is created. Now I want to upload this signed apk file to fabric with Jenkins.
Any ideas ?
sorry for late answer but search for fabric beta's jenkins plugin you can simply arrange that sort of upload in post-build actions

Xcode Bot CI | Unable to find matching destination

I have setup an Xcode server and using Xcode Bots to do CI in my machine. (Same is used for development.)
Creating a bot for a project, works fine. However, if I add the same project to the workspace, (I have shared the scheme - [which is set to the workspace container] so that is not the issue.) I am getting the below error.
xcodebuild: error: Unable to find a destination matching the provided
destination specifier:
The git currently resides on the Xcode server.
(Followed the steps here)
Also noticed that, once I clone the repository and open the .xcworkspace, the project and the scheme is not displayed.
I suspect this to be the issue. However, not able to find a way to fix this. Any help is greatly appreciated. Thanks!
[Using Xcode version: 7.3.1 on OS X El Capitan v: 10.11.4]

Crashlytics in iOS won't proceed past "Build Your Project" in Fabric app

I'm installing Crashlytics for my iOS app. I downloaded it via their site link, and went through all the steps for integrating the frameworks, adding the run script, etc.
I was experiencing an issue, so I removed the frameworks and decided to start over and try a fresh install. But the Fabric app updated to a newer version, and now when I try to reinstall Crashlytics into my app, it doesn't give me the option to reinstall the frameworks. It goes straight from clicking "install" to the "Build your project" screen, which I cannot pass.
To help configure your project, please build it now by pressing ⌘B
I press ⌘B, it builds and nothing happens. I think the issue is because I removed the Crashlytics and Fabric frameworks from my project, but I can't see a way to add them back again. The Fabric app doesn't give me that option.
Go into Build settings of the your target.
Find "Debug Information Format".
Set this from "DWARF" in both debug and release to "DWARF with dSYM File"
Moving from Comment to Answer.
Mike from Fabric here. If you back up through the Mac app, then click on the arrow in the top-left, click on "+ New App", that will walk you through re-adding everything.
If you check the resource navigator you may see the following message:
"DEBUG_INFORMATION_FORMAT should be set to dwarf-with-dsym for all configurations. This could also be a timing issue, make sure the Fabric run script build phase is the last build phase and no other scripts have moved the dSYM from the location Xcode generated it. Unable to process eCreditWebWrapper.app.dSYM at path"
Go to Build Settings and search for "Debug Information Format". Ensure "Debug" is set to "DWARF with dSYM File".
Without the dSYM file Fabric won't work.
As for Xcode 10.2.1, the automated installation via Fabric Mac app won't work anymore. New apps cannot be added via the New App Step-by-step guide.
You have to follow the manual installation instructions. Download and add the 2 frameworks into your Xcode workspace, then add the Run Build Script phase (and related Fabric codes), then build the App. Last (very important), run the app in an actual device.
Once the App is successfully launched, the new App information will be available in the Fabric dashboard as well as the Fabric Mac App (needs to relaunch the App to see the new app).
Here are the steps:
Download the 2 frameworks
Drag to your project where your App Delegate is (make sure ticked "Copy items if needed")
Compile the project / workspace in Xcode
Add the "Run Script Phase" as instructed here; note that Xcode 10+ requires an extra configuration at Input Files
Add the required import and initialization codes in App Delegate
Add the Fabric API keys in Info.plist
Compile again
Run the App in a real device. You will see the line Crashlytics in the Xcode log. If no log appears, checks if your active scheme contains OS_ACTIVITY_MODE settings. Set it to default if the current setting is disabled.
If the Crashlytics line appears, that means the manual installation is working; you will see your App appearing at Fabric online dashboard.
I have solved this issue by the following way. Following the advise from above, I began adding a new app to crashlytics. When I reached to adding new "Run script" build phase, I just copied that text and pasted it over the previous one(created with Crashlytics).
I have also unchecked "Run script only when installing".
After this, I canceleed adding a new app and procedeed back to the UPGRADE. At this moment, building the app, can pass you to the next step and you don't get stuck on that screen anymore.
I was stucked on Build phases too.
I have also unchecked "Run script only when installing" and press again command+B and then I passed to the next step.
If the script is not running, you may have checked the "run script only when installing" in the run script section.
I hope it helps
TL;DR
Tap your scheme -> edit scheme -> set build configuration to "Release"
Explanation:
The most voted answer sounds about right, but there are situations where you just don't need crashlytics in debug builds (who wants crashes sent when you just develop and experiment with your code?). In this case you should disable crashlytics by checking debug compilation flags (out of scope of this answer) and for the first time during installation build app for release to let crashlytics know that you built app.
I had the same issue today. The problem was that i didn't have the run-script :
./Fabric.framework/run <api key>
in my project. Once i put this back in then it all worked perfectly. I also cleaned my project and deleted derived data just to be sure.
you must check that your deployment target version because of "Fabric's minimum iOS version is 6.0"
I was only able to get the Fabric app to continue the installation process after setting my build target to 'Generic iOS Device' and creating an archive from the Product > Archive menu.
Simply building the app or running it on an emulator doesn't seem to trigger the Fabric App to proceed.
If you use Xcode 10.
Project Navigator -> your project -> Targets -> Build Phases -> your Run Script for Fabric -> Input Files -> "+" (add input file) -> clear field and past this line:
$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)
Be sure to remove this: $(SRCROOT)/
In the Run Script build phase there is a call:
./Crashlytics.framework/run <your_api_key_here>
Maybe you added some conditions to trigger it only on certain builds like:
releaseConfig="Release"
if [ "$releaseConfig" = "${CONFIGURATION}" ]; then
echo "Running Crashlytics"
./Crashlytics.framework/run <your_api_key_here>
fi
so that it will not just trigger on ⌘B
See https://dev.twitter.com/crashlytics/ios/advanced-setup
In my situation I was following all the steps correctly but got stuck on 'add build phase' step.
Then I just restarted fabric and all works just fine
Also there are some other possible actions:
1) Just restart Fabric, Xcode and your Mac.
2) Also if you use Cocoapods change build phase line from
./Crashlytics.framework/run [yourAPIKey]
to
"${PODS_ROOT}/Fabric/run" [yourAPIKey]
3) After building project if Fabric will stop responding just wait a while. It took about minute on my Mac.
Thanks, I solved the problem by removing folders:
~ / Library / Caches / com.crashlytics.data
~ / Library / Caches / com.crashlytics.mac
Kindly cross verify that run script you adding is to your actual target if u will add to tests target it will not proceed until you add it to actual target
None of the solutions here worked for me. The scenario for me was someone else added the Fabric framework to our project and committed it to the repo. The run script on their computer launched/triggered the Fabric Plugin, but would not launch/trigger on mine, although it did not report errors.
The solution was to create a separate project, using Cocoapods download the same version of Fabric, replace the run script in our project/repo (and the one referenced in the target's run script) with the downloaded version from Cocoapods. Rebuild and then the plugin would respond.
Comparing the two run script files, they are drastically different, but the run script from Cocoapods was not a flat text file and it was unreadable. So I'm not sure what was different between the scripts, but we somehow got different versions of the script while using the same version of Fabric.
What I did wrong was adding the script to the pods project build phase instead of the main project build phase, adding it to the main projects build phase solved the problem.
If you are duplicating the target, remove the run script from build phase and add it again to solve the issue.
If you have multiple TARGETS,
check your Schema selection is correct before you build project.
For Xcode 10. Add your app's built Info.plist location to the Build Phase's Input Files field:
$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)
This solved my issue i hope this can solve others issue.
It turned out I had not enough permissions to create new project in Fabric.
Upgrading from Member to Admin resolved the issue.
In my case, removing an app from helped.
1) Remove the app from Fabric.
2) Follow all the steps again to add the app and install Crashlytics.
Nothing helped me. Now Fabric catches my archive creation. But I create the archives via fastlane's build_app.
Open Project in higher version of Xcode. This resolved my issue after waste many hours.
My Project build on Xcode 10.2 and I was running on Xcode 10.1 but when I run the same project on Xocode 11. The build was succeeded.
Try to wrap your run script variable with double quotes ""
"${PODS_ROOT}/Fabric/run"
Go to folder /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/<CURRENT_IOS_SDK>/usr/lib/ and delete all .dylib files.
It worked for me.

Xcode, Git, Jenkins, PhoneGap 1.5.0 Build Error

I have developed an application with phonegap 1.5.0 previously and now we just pushed into git repository. The app was build successfully in xCode and I was able to install the app and run it on the iPad but when we tried to build it from Jenkins, we got this error
/Users/...../Classes/AppDelegate.m:28:
/Users/......./Classes/AppDelegate.h:31:13: fatal error: 'Cordova/CDVViewController.h' file not found
#import <Cordova/CDVViewController.h>
I really don't know why is this happening. Did I not include any file into gitt that causes this problem? or is there any extra steps that I need to take to put the codes into git? Any advice on this is deeply appreciated.
My PhoneGap project is able to build and generates .ipa.
Here's what I have done for my CI integration using Jenkins:
Install Xcode integration plugin for Jenkins (manage Jenkins --> Manage Plugins --> Available --> Xcode integration).
In your Job configuration, click the Add build Step button and choose Xcode.
In Xcode configuration:
3.1. Add Clean before build.
3.2. Add Target of your project (e.g.: SamplePhonegap).
3.3. Add SDK (e.g.: iphoneos6.1).
3.4. Add Configuration as Debug or Release.
3.5. Add Xcode Project Directory which contain .xcodeproj (e.g.: ${WORKSPACE}).
3.6. Build output directory (e.g.: ${WORKSPACE}/build) [Mandatory Step for PhoneGap App].
3.7. Add Build IPA.
3.8. Add Code Signing Identity (e.g.: iPhone Developer: S*** ** (6**)).
3.9. Add Unlock KeyChain.
3.10. Add keyChain Path (e.g.: ${HOME}/Library/Keychains/login.keychain).
3.11. Add Keychain password.
Finally build your app - it will build and generate the .ipa file.
Note:
3.6 step is mandatory because a PhoneGap project has two build paths: one is our project build path and another one is cordova build path. Jenkins tough to find the path default (In native not need to specify, because it has only one build path Jenkins can easily find). So it's mandatory to provide Build output directory path.
What you can do is to try to clone the git repo to your local machine and build from there. If it's ok, it means that you need to check Jenkins setting/configuration.
This by far the best solution i found.Original Answer
Xcode 6.x
add $(OBJROOT)/UninstalledProducts/include to BuildSettings->Header Search Paths
Xcode 7.x
add $(OBJROOT)/UninstalledProducts/$(PLATFORM_NAME)/include to BuildSettings->Header Search Paths
1.Double click the and you can add this in.
2.Change $(OBJROOT)/UninstalledProducts/include to $(OBJROOT)/UninstalledProducts/$(PLATFORM_NAME)/include

Resources