libs-uikit is a GNUstep Objective-C library that provides a UIKit-like API on
top of GNUstep Base and GUI. It is intended for code that wants familiar UIKit
class names and application structure while running in a GNUstep/AppKit
environment.
The library currently exposes a focused subset of UIKit-style classes including application/window management, views and view controllers, common controls, table/navigation/tab containers, images, colors, fonts, nib loading helpers, and basic device/screen abstractions.
This is currently a POC which may have significant gaps with the actual UIKit. It illustrates that using AppKit to create some of the widgets needed for UIKit is possible.
AI was used for some of the concepts of this library. Particularly the repetative coding parts.
Headers/UIKit/- public headers and the umbrellaUIKit.hheader.Source/- Objective-C implementation files and the library makefile.Examples/- a smallUIKitExampleGNUstep application using a xib file.COPYING.LIB- GNU Lesser General Public License text.
- GNUstep Make
- GNUstep Base
- GNUstep GUI
- Objective-C compiler supported by GNUstep
GNUSTEP_MAKEFILES must be available. If it is not already exported by your
environment, the top-level makefile tries to discover it with:
gnustep-config --variable=GNUSTEP_MAKEFILESFrom the repository root:
makeThe top-level build includes both subprojects:
Sourcebuilds thelibs-uikitshared library.Examplesbuilds theUIKitExampleapplication.
To build only the library:
make -C SourceTo build only the example application:
make -C ExamplesThe Android build uses the NDK CMake toolchain and builds the library target only. It expects GNUstep Base, GNUstep GUI, and libobjc to already be built for the same Android ABI and available in one prefix.
cmake -S . -B build-android \
-DCMAKE_TOOLCHAIN_FILE="$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake" \
-DANDROID_ABI=arm64-v8a \
-DANDROID_PLATFORM=android-24 \
-DGNUSTEP_ANDROID_ROOT=/path/to/android-gnustep-prefix
cmake --build build-androidGNUSTEP_ANDROID_ROOT should contain GNUstep headers under either
include/GNUstep or include, and Android ABI libraries under either lib or
lib/<abi>. If your Objective-C runtime is not libobjc2's GNUstep 2.0 runtime,
override UIKIT_ANDROID_OBJC_RUNTIME.
After building, run the example application from the Examples directory using
the normal GNUstep application launch method for your environment. The example
creates a UIWindow, loads MainView.xib through an ExampleViewController,
and demonstrates labels, text fields, sliders, switches, buttons, and control
events.
Import the umbrella header:
#import <UIKit/UIKit.h>Applications use the familiar UIKit-style entry point:
int main(int argc, char **argv)
{
return UIApplicationMain(argc, argv, nil, @"ExampleAppDelegate");
}The public API is intentionally modeled around UIKit names, but the underlying
types are GNUstep/AppKit types. For example, CGPoint, CGSize, and CGRect
are typedefs for NSPoint, NSSize, and NSRect.
UIApplication,UIResponder,UIScreen,UIDeviceUIView,UIWindow,UIViewControllerUIColor,UIImage,UIFontUILabel,UIImageViewUIControl,UIButton,UITextField,UITextViewUISlider,UISwitch,UISegmentedControl,UIScrollViewUITableView,UITableViewCell,NSIndexPath+UIKitUINavigationItem,UINavigationController,UITabBarControllerUIActivityIndicatorView,UIAlertViewUINib,NSBundle+UIKit
This project is distributed under the GNU Lesser General Public License. See
COPYING.LIB for the full license text.