Jak zachęcić Travis CI do budowania i testowania projektów Xcode hostowanych na Githubie?

Mam otwarty kod źródłowy hostowany na GitHubie do dodania kategorii opartej na blokach do UITextField . Dodałem .travis.plik yml, dzięki któremu Travis CI zbuduje i uruchomi kod przy każdym naciśnięciu. Link do ostrzeżenia Travis CI . Z powodzeniem buduje projekt. Ostrzeżenie dostaję podczas uruchamiania .travis.skrypt yml to:

WARNING: Using Objective-C testing without specifying a scheme and either
a workspace or a project is deprecated.

Przykładowy projekt, który chcę uruchomić znajduje się w folderze / UITextView Blocks Example/ Jak Mogę dodać do.travis.plik yml do uruchomienia ten projekt? Mój travis.plik yml składa się teraz z

language: objective-c
Author: hakonbogen, 2013-10-26

2 answers

Aktualizacja 2017

Skypecakes wspomina w komentarzach :

Dla każdego, kto używa XCode 8 i wyższych: xctool nie jest już obsługiwane i nie działa.
Użycie xcodebuild zamiast tego.


Original answer (2013)

Możesz sprawdzić ten tutorial , który wyjaśnia:

xctool jest doskonałym wyborem do przeprowadzania testów w ramach ciągłej integracji serwer jak Travis CI czy Jenkins.
aby uruchomić testy w środowisku ciągłej integracji, musisz utworzyć wspólne Schematy Dla celu aplikacji i upewnić się, że wszystkie zależności (takie jak CocoaPods) są dodane jawnie do schematu.
Aby to zrobić:

  1. otwórz arkusz Zarządzaj schematami, wybierając menu produkt > Schematy > Zarządzaj schematami...
  2. Zlokalizuj docelową aplikację na liście. Zapewnić, że wspólne pole wyboru w prawej kolumnie arkusza jest zaznaczone.
  3. jeśli Twoja aplikacja lub cele testowe zawierają zależności między projektami, takie jak CocoaPods, musisz upewnić się, że zostały skonfigurowane jako wyraźne zależności. Aby to zrobić:
    • Podświetl cel aplikacji i naciśnij przycisk Edytuj... przycisk, aby otworzyć arkusz edycji schematu.
    • Kliknij kartę budowanie w lewym panelu edytora schematów.
    • Kliknij przycisk + i dodaj każdy zależność od projektu. CocoaPods pojawi się jako statyczna biblioteka o nazwie Pods.
    • przeciągnij zależność nad docelową aplikacją, aby została zbudowana jako pierwsza.

Teraz będziesz mieć nowy plik w katalogu xcshareddata/xcschemes pod twoim projektem Xcode .
Jest to współdzielony schemat, który właśnie skonfigurowałeś.
Sprawdź ten plik w swoim repozytorium, a xctool będzie w stanie znaleźć i wykonać testy na następnej kompilacji CI.

Aby uzyskać większą elastyczność, możesz również kontrolować, jak Travis instaluje i wywołuje xctool:]}
language: objective-c
before_install:
    - brew update
    - brew install xctool
script: xctool -workspace MyApp.xcworkspace -scheme MyApp test

Ta ostatnia konfiguracja jest podobna do podejścia pokazanego w ten drugi tutorial :

Po połączeniu repo następnym krokiem będzie dodanie pliku .travis.yml do katalogu głównego repo.

  language: objective-c

  before_script: travis/before_script.sh
  script: travis/script.sh
    Najpierw powiem Travisowi, że to projekt objective-C.
  • następnie powiem Travisowi, jak bym tego chciał aby zrobić CI przeciwko temu repo, podając mu instrukcje, jakie Skrypty powinien uruchomić, aby faktycznie wykonać build.

Daję również dodatkowe instrukcje, co zrobić tuż przed uruchomieniem kompilacji.
jest to dość powszechne, aby umieścić wszystkie kroki budowania inline prawo w .travis.plik yml, ale wolę tworzyć skrypty Basha w moim repo wewnątrz katalogu w moim git repo, a następnie po prostu odwoływać się do tych skryptów z mojego .travis.yml.
to utrzymuje .yml plik ładny i mały, a także ułatwia mi testowanie skryptów kompilacji lokalnie .

Daliśmy Travisowi before_script w pliku .yml powyżej. Ma to być wykorzystane przez agenta Travis do pobrania narzędzi potrzebnych jako część kompilacji. Oto jak to wygląda:
travis/before_script.sh

#!/bin/sh
set -e

brew update
brew install xctool
Bardzo proste. Używamy homebrew do zainstalowania xctool na agencie kompilacji.
Wszyscy agenci Travis build mają preinstalowany homebrew, ale czasami formuła nie jest na bieżąco, więc najlepiej uruchomić brew update przed przystąpieniem do brew install.
To wszystko, co musimy zrobić, aby przygotować naszego agenta do budowy.

Następnie spójrzmy na sam skrypt budowania:

travis/script.sh

#!/bin/sh
set -e

xctool -workspace MyWorkspace -scheme MyScheme build test
To naprawdę proste.
Najpierw wykonujemy podstawowe sprawdzenie świadomości poprzez prosząc xctool o zbudowanie naszej aplikacji, określając obszar roboczy i schemat.
To tylko sprawdza, czy nie mamy żadnych błędów kompilacji.
Zakładając, że uda się xctool następnie zbuduj i uruchom cel testów jednostkowych dla naszej aplikacji, uruchamiając symulator na agencie Travis w razie potrzeby.
 16
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-23 06:39:59

Gdy określisz język Objective-C w pliku .travis.yml, serwer CI domyślnie użyje swojej zaadaptowanej wersji osx-cibuild.sh. Spowoduje to wyszukanie wszystkich obszarów roboczych w bieżącym katalogu i zbudowanie wszystkich domyślnych celów.

Ponieważ twój repo nie ma żadnych przestrzeni roboczych w katalogu głównym( są one pod Examples), nie może znaleźć, co zbudować, a więc niczego nie zbuduje.

Możesz albo przenieść plik projektu z dołu Examples do katalogu głównego, albo określić, według czego ma być zbudowany ustawienie XCWORKSPACE w Twoim config CI, lub możesz określić niestandardowy skrypt do uruchomienia, a następnie wywołać xcodebuild samodzielnie. Ustawienie konfiguracji przestrzeni roboczej jest prawdopodobnie preferowaną opcją; nie dostosowuj jej, jeśli nie musisz.

Dodaj coś takiego do swojego .travis.yml:

env:
  - XCWORKSPACE="Examples/UITextField-Blocks Example.xcodeproj"

(cudzysłowy są tam ze względu na wewnętrzną spację nazwy pliku.)

Warto przyjrzeć się skryptowi osx-cibuild.sh, aby zobaczyć, jak działa i jak można dostosować jego zachowanie poprzez ustawienie różne zmienne środowiskowe.

Przydatne referencje:

 3
Author: gavinb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-29 07:43:38