XCode
Spickzettel für die IDE XCode.
Shortcuts
Siehe: Xcode-Menü -> Preferences -> Keybindings
Cmd
+/
bzw.Cmd
+Shift
+7
: Markierten Block auskommentierenCmd
+Shift
+O
: Datei schnell öffnen (O = Open)Cmd
+Shift
+F
: Im Projekt suchen (F = Find)
Einstellungen
- Preferences -> Text Editing Anhaken unter "Automatically trim trailing whitespace": "Including whitespace-only lines"
Plattenplatz aufräumen
Xcode nimmt für Build-Artefakte und VMs viel Plattenplatz ein. So kann verschiedenes wieder löschen:
Kram löschen (vorher Xcode beenden):
# Delete caches - Xcode will then download some stuff on next start
rm -rf ~/Library/Caches/com.apple.dt.Xcode
# Delete Derived Data
rm -rf ~/Library/Developer/Xcode/DerivedData
# List archives
ls ~/Library/Developer/Xcode/Archives/*
# Delete obsolete archives (replace `2019-07-22` accordingly)
rm -rf ~/Library/Developer/Xcode/Archives/2019-07-22
# List device support
ls ~/Library/Developer/Xcode/iOS\ DeviceSupport
# Delete all except for the newest (replace `14*` accordingly)
rm -rf ~/Library/Developer/Xcode/iOS\ DeviceSupport/14*
# Either: Delete all simulators
sudo rm -rf ~/Library/Developer/CoreSimulator/*
# Or: Delete unavailable simulators
xcrun simctl delete unavailable
# Or: Clear all simulators
xcrun simctl erase all
Quelle: Blog-Artikel
Unit-Tests erstellen
- In Xcode per
Cmd
+6
den Test navigator öffnen - Unten links auf
+
, dann auf "New Unit Test Target" klicken - Test Target anlegen
- In der Liste links wurde nun ein Test Target und eine Beispiel-Test-Klasse angelegt.
j2objc in iOS-Projekt einbinden
Quellen:
- j2objc-Doku Xcode Build Rules
- j2objc-Doku Required Link Settings
- Apple-Doku Swift and Objective-C in the Same Project
Generierten Quellcode hinzufügen:
- Rechtsklick auf Projekt und "Add Files to XYZ" auswählen.
- Order mit genertiertem Objective-C-Code mit Option "Create groups" auswählen.
Build-Settings ändern:
- In Xcode im Projekt "Build Settings" öffnen
- Unter "Other Linker Flags" hinzufügen:
-ObjC
,-ljre_emul
und-liconv
(und evtl. auch-lz
für Zip-Support,-framework Security
für Security-Kram) - Oben auf "+" und dann "Add User-Defined Setting" klicken
- Das Setting
J2OBJC_HOME
mit dem Pfad zu j2objc anlegen (relativ zurxcodeproj
-Datei, z.B.../../j2objc
) - Bei "Framework Search Paths" den Wert
${J2OBJC_HOME}/frameworks
hinzufügen - Bei "Header Search Paths" den Wert
${J2OBJC_HOME}/include
undgenerated-objc
(Pfad zu generiertem Objective-C-Code) hinzufügen - Bei "Library Search Paths" den Wert
${J2OBJC_HOME}/lib
hinzufügen - (TODO wirklich?) "Use Header Maps" auf "No" stellen (sonst gibt es Probleme, wenn z.B. ein
Assert.h
im Quellcode vorkommt - da es auch einen iOS-Headerassert.h
gibt)
Bridging-Header anlegen:
- In XCode: File -> New -> Header File
- Name:
myapp-Bridging-Header.h
- Im Projekt unter "Build Settings" -> "Objective-C Bridging Header" Pfad zum Bridging-Header eintragen (z.B.
myapp/myapp-Bridging-Header.h
)
Anderes Projekt als Subproject einbinden
Quelle:
- Blog-Artikel How to add XCode subproject
Anderes Projekt als Subproject einbinden:
- Aus dem Finder
mylib.xcodeproj
per Drag'n'drop in XCode ins App-Projekt ziehen - In XCode im Projekt unter "Build Phases" -> "Target Dependencies" die Abhängigkeit "mylib" hinzufügen
Was an Xcode nervt
- Xcode kann keine Multizeilencursor
- Xcode zeigt keine Liste der offenen Files (zum schnellen Wechsel in den gerade wichtigen Files)
- Xcode: Mehrere Zeilen ein- und ausrücken: Alt+Cmd+5 und Alt+Cmd+6
- Xcode macht keinen Spell-Check in Kommentaren
- Swift-Editor (Swift 2) erzeugt fehlende Methoden bei Implementierung eines Protocols nicht automatisch
- Xcode verbrät mit der Zeit ewig viel Plattenplatz Siehe: http://blog.favo.org/post/31649090293/xcode-5-places-to-save-some-disk-space
- Man muss alle Einstellungen in der fummeligen UI vornehmen, weil XCode ein Projekt-Format verwendet, das man nicht wirklich als Mensch bearbeiten kann.
- Man spürt immer wieder, dass der Unterbau uralt ist (aus Next-Zeiten). So muss man z.B. an tausend Stellen irgendwelche Header-Pfade eintragen. So wird die Aufteilung eines Projekts in Unterprojekte zum totalen Krampf.