2016-07-14 11 views

Odpowiedz

2

Teraz możemy zbudować kod bez otwierania Xcode

Branding (UI, Budowanie ustawienia i funkcjonalny)

  • UI
    • ikona aplikacji & inne ikony
    • iTunes Artwork
  • ustawienia Zbuduj
    • Nazwa aplikacji
    • Identyfikator pakietu
    • Provisioning profil
    • podpisanie Kod tożsamość
  • funkcjonalna
    • Marka specyficzny URL (logowania, wylogowania, zasobów sprowadzić etc ...)

Korzystanie Terminal

Branding.sh

#Author: Durai Amuthan([email protected]) 
#This is to achieve multiple branding of an iOS app by configuring the variables below 

#************ Configuring the brand starts ************ 

#Directory path where .xcworkspace or .xcodeproj exists 
PathOfProjectDirectory=/Users/Shared/Jenkins/Documents/JenkinsTestNuu/New/ 

#Path where info.plist exists 
PathOfInfoPlist=$PathOfProjectDirectory/XxYyZz 

#Path to icons where new iTunesArtwork and application icon exixts 
#Note: Make sure proper naming conventions of file has been followed 
PathOfNewIcons=/Users/Shared/Jenkins/Documents/icons-two 

#Path to asset resource where you have kept your application icon. 
PathOfAppIconSet=$PathOfProjectDirectory/XxYyZz/Icon.xcassets/AppIcon.appiconset 

#Path where do you want the .app file has to be kept 
PathToApp=/Users/Shared/Jenkins/Documents/JenkinsTestNuu/app 

#Path where do you want the .ipa file has to kept 
PathToIpa=/Users/Shared/Jenkins/Documents/JenkinsTestNuu/ipa 

#Cocoapods project or project that involves more than one modules are scheme based 
isWorkspaceBased=true 

#Path of the Project (.xcodeproj) - applicable for workspace(.xcworkspace) based project 
PathofProjectFile=$PathOfProjectDirectory/XxYyZz.xcodeproj 

#Path of the Workspace (.xcworkspace) 
PathofWorkspaceFile=$PathOfProjectDirectory/XxYyZz.xcworkspace 

#Name of the target - applicable only for non-workspace(.xcodeproj) based projects 
Target=XxYyZz 

#Scheme of the iOS app 
Scheme=XxYyZz 

#To ascertain Cocoapods has been used or not 
isCocoaPodsBased=true 

#Configuration of the app (Debug -(Development) or Release(Adhoc or Distribution)) 
Config=Release 

#For giving access to signing idetity found in KeyChain 
LoginKeychainPath=/Users/Shared/Jenkins/Library/Keychains/login.keychain 
LoginKeyChainPassword=xxyyzz 

#Name of the code signing identity.You can find the name in Keychain or xcode build setting 
CodeSigningIdentity='iPhone Distribution: Xx Yy Zz Limited (3Z5MHUYJ2L)' 

#Path of the provisioning profile 
PathToMobileProvision=/Users/Shared/Jenkins/Desktop/BrandingTest.mobileprovision 

#UUID value found inside Provisioning profile has to be given 
#Do not forget to install provisiong profile in the system 
ProvisioningProfileIdentity=6e6506e9-8233-4886-9084-zf21e8f8bbae 

#Bundle identifier of the app 
BundleIdentifier=com.xxyy.zz 

#AppVersion of the app 
AppVersion=2.2.2 

#App Name 
Appname=Two 

#************ Configuring the brand ends ************ 

#** Creatting the build based on configuration starts ** 

cd $PathOfInfoPlist 
echo "****************** Setting App Name ******************" 
/usr/libexec/PlistBuddy -c "Set :CFBundleName $Appname" info.plist 
/usr/libexec/PlistBuddy -c "Set :CFBundleDisplayName $Appname" info.plist 
echo "app name has been set as $Appname" 

cd $PathOfProjectDirectory 
echo "****************** Setting AppVersion ******************" 
/usr/bin/agvtool new-marketing-AppVersion $AppVersion 
/usr/bin/agvtool new-AppVersion -all $AppVersion 

echo "****************** Changing app icons & iTunes Artwork ******************" 
cp -R $PathOfNewIcons/*.png $PathOfAppIconSet 
echo "App icons has been changed at $PathOfNewIcons" 
cp -R $PathOfNewIcons/[email protected] $PathOfProjectDirectory/XxYyZz 
cp -R $PathOfNewIcons/iTunesArtwork $PathOfProjectDirectory/XxYyZz 
echo "iTunesArtwork has been changed at $PathOfProjectDirectory" 

#Unlock login keychain 
security unlock-keychain -p $LoginKeyChainPassword $LoginKeychainPath 
if $isCocoaPodsBased == 'true' 
then 
echo "****************** Installing Cocoapods **********************" 
/usr/local/bin/pod install 
echo "Cocoapods has been installed" 
fi 

echo "****************** Creating .app ******************" 
if $isWorkspaceBased == 'true' 
then 
/usr/bin/xcodebuild -scheme $Scheme -workspace $PathofWorkspaceFile -configuration $Config clean build CONFIGURATION_BUILD_DIR=$PathToApp "CODE_SIGN_IDENTITY=$CodeSigningIdentity" "PRODUCT_BUNDLE_IDENTIFIER=$BundleIdentifier" "PROVISIONING_PROFILE=$ProvisioningProfileIdentity" 
else 
/usr/bin/xcodebuild -target $Target -project $PathofProjectFile -configuration $Config clean build CONFIGURATION_BUILD_DIR=$PathToApp "CODE_SIGN_IDENTITY=$CodeSigningIdentity" "PRODUCT_BUNDLE_IDENTIFIER=$BundleIdentifier" "PROVISIONING_PROFILE=$ProvisioningProfileIdentity" 
fi 
echo ".app has been generated at $PathToApp" 

echo "****************** Creating .ipa *******************" 
/usr/bin/xcrun -sdk iphoneos PackageApplication -v $PathToApp/XxYyZz.app -o $PathToIpa/$Appname.ipa --embed $PathToMobileProvision --sign "$CodeSigningIdentity" 
echo "$Appname.ipa has been generated at $PathToIpa" 

#** Creatting the build based on configuration ends ** 

Plik jest self-opisowy ty łatwo zrozumieć. Wystarczy skonfigurować wartości zmiennej w pliku i nazwać jak poniżej

sh Branding.sh 

FYI:

Jeśli chcesz jakieś inne ikony również zostać zmienione oprócz ikona aplikacji i iTunesArtwork użycie cp polecenie e.g

cp path/to/source path/to/destination 

Aby poznać więcej szczegółów zrobić cp man

Z powyższego pliku można zrobić Branding dla UI i zbudować Ustawienia.

Dla funkcjonalny branding, trzeba mieć konkretne adresy

  • Marka

  • Inne wejścia odpowiedni do marki

w oddzielnym pliku plist tak, że ta rzeczy mogą być również zmieniane zgodnie z odpowiednią marką podczas budowania aplikacji

Plist file

w bok kodowania można dostosować aplikację do odczytywania wartości z plist jak ten

Function umowach definicja:

func getPlistFile()->Dictionary<String,AnyObject>? { 
     var dictPlistFile:Dictionary<String,AnyObject>? 
     if let path = NSBundle.mainBundle().pathForResource("plistfile", ofType: "plist") { 
      if let dictValue = NSDictionary(contentsOfFile: path) as? Dictionary<String, AnyObject> { 
       dictPlistFile=dictValue 
      } 
     } 
     return dictPlistFile 
    } 

wywołanie funkcji:

var Value=getPlistFile()?["Key"] 

można zmienić wartości klucza według marki przy użyciu PlistBuddy podczas budowania aplikacji

Oto składnia

/usr/libexec/PlistBuddy -c "Set :Key Value" plistfile.plist 

Korzystanie Jenkins

Możemy skutecznie ponownie użyj skryptu powłoki tutaj w jenkins

1. Musisz sparametryzować wszystkie zmienne w skrypcie powłoki w usnkins usi ng Dodaj parametr ... jak na poniższym zrzucie ekranu I zrobili dla jednej zmiennej takiego trzeba zrobić dla wszystkich innych

Paramterization

2.Choose Wykonanie powłoki w Budowa Krok

Build Step

3.Skopiuj skrypt, który jest tam w między Tworzenie build opiera się na konfiguracji zaczyna i tworzeniu kompilacji na podstawie konfiguracji kończy i wkleić go w Execute Shell Execute Shell

Uwaga:

  • Reguły zasobów

    Istnieje znany błąd dotyczący ResourceRules Xcode w niektórych wersjach podczas budowania i pakowania aplikacji poprzez interfejs inny niż xcode.

    Więc musi to być uruchamiane raz, aby wyłączyć sprawdzanie poprawności dla zasad zasobów ścieżka w Xcode .Powierzchnia ścieżka zasady zasób jest przestarzałe funkcji i jabłko nie akceptuje aplikacje że pochodzi z zasobów, ale zasad jeśli stworzymy aplikację bez użycia Xcode, pojawi się błąd sprawdzania, że ​​nie znaleziono reguł zasobów, aby przeciwdziałać, że musimy uruchomić skrypt tylko raz.

xcode_fix_PackageApplicationResourceRules.sh

#!/bin/sh 
# A script to patch xcrun PackageInstallation so that it doesn't use the deprecated --resource-rules 
# See "Do not use the --resource-rules flag or ResourceRules.plist. They have been obsoleted and will be rejected." 
# under https://developer.apple.com/library/mac/technotes/tn2206/_index.html#//apple_ref/doc/uid/DTS40007919-CH1-TNTAG205 
# Reported as Apple bug #19384243 
# 
# should be run as a user who can modify the PackageApplication file 

xcodedir=$1 

function usage { 
     # FIXME we cannot parse args properly because 2 are optional... 
     echo "USAGE: $0 xcodedir" 
     echo " xcodedir: an install dir like /Application/Xcode6.1.1.app" 
} 

if [[ $# -ne 1 ]]; then 
     echo "ERROR: invalid number of arguments" 
     usage 
     exit -1 
fi 

pi="$xcodedir/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication" 
piorig="$piOrig" 

if [[ ! -f "$pi" ]]; then 
    echo "$pi file not found. Invalid argument ?" 
    usage 
    exit -1 
fi 

grep resource-rules "$pi" 
if [[ $? -ne 0 ]]; then 
    echo "PackageApplication doesn't use resource-rules. Skipping" 
    exit 0 
fi 

if [[ -f "$piorig" ]]; then 
    echo "Backup file $piorig already exist. Aborting" 
    exit -1 
fi 

perl -p -i'Orig' -e 'BEGIN{undef $/;} s/,resource-rules(.*sign}).*ResourceRules.plist"/$1/smg' "$pi" 
echo $? 
  • Unlock Brelok

    każdym uruchomieniu Branding.sh terminal poprosi użytkownika i hasło dostępu do jego systemowego pęku kluczy

    każdym uruchomieniu pracy w Jenkins dostaniesz „interakcji użytkownika nie jest dozwolone” Błąd

    tak, aby uporać się z tym trzeba postępować zgodnie z poniższymi instrukcjami

    • Otwórz Dostęp do pęku kluczy
    • prawym przyciskiem myszy na klucz prywatny
    • Wybierz "Get Info"
    • Wybierz "Access Control" kartę
    • Kliknij "Zezwalaj aplikacjom na dostęp do tego elementu"
    • Kliknij przycisk "Zapisz zmiany"
    • Wprowadź hasło
  • Provisioning profil

    jeśli kiedykolwiek dostać "No Matching Provisioning Profil znaleziony "upewnij się, że kliknąłeś dwukrotnie i zainstalowałeś go przez Xcode.

    Moment zainstalowaniu zobaczysz UUID.mobileprovision w ~/Library/UrządzeniePrzenośne/Provisioning Profile/

    Ten UUID jest wartością wewnątrz przepisu mobilnego oznacza to, że profil rezerw jest zainstalowany.

Mam nadzieję, że to pomaga

Powiązane problemy