about summary refs log tree commit diff
path: root/ios/bluesky
diff options
context:
space:
mode:
Diffstat (limited to 'ios/bluesky')
-rw-r--r--ios/bluesky/AppDelegate.h7
-rw-r--r--ios/bluesky/AppDelegate.mm72
-rw-r--r--ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@1x.pngbin0 -> 966 bytes
-rw-r--r--ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@2x.pngbin0 -> 3051 bytes
-rw-r--r--ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@3x.pngbin0 -> 6132 bytes
-rw-r--r--ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@1x.pngbin0 -> 1766 bytes
-rw-r--r--ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@2x.pngbin0 -> 5795 bytes
-rw-r--r--ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@3x.pngbin0 -> 11680 bytes
-rw-r--r--ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@1x.pngbin0 -> 3051 bytes
-rw-r--r--ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@2x.pngbin0 -> 10119 bytes
-rw-r--r--ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@3x.pngbin0 -> 20332 bytes
-rw-r--r--ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-60x60@2x.pngbin0 -> 20332 bytes
-rw-r--r--ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-60x60@3x.pngbin0 -> 40513 bytes
-rw-r--r--ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-76x76@1x.pngbin0 -> 9213 bytes
-rw-r--r--ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-76x76@2x.pngbin0 -> 30371 bytes
-rw-r--r--ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-83.5x83.5@2x.pngbin0 -> 35592 bytes
-rw-r--r--ios/bluesky/Images.xcassets/AppIcon.appiconset/Contents.json122
-rw-r--r--ios/bluesky/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.pngbin0 -> 750143 bytes
-rw-r--r--ios/bluesky/Images.xcassets/Contents.json6
-rw-r--r--ios/bluesky/Images.xcassets/SplashScreen.imageset/Contents.json21
-rw-r--r--ios/bluesky/Images.xcassets/SplashScreen.imageset/image.pngbin0 -> 549567 bytes
-rw-r--r--ios/bluesky/Images.xcassets/SplashScreenBackground.imageset/Contents.json23
-rw-r--r--ios/bluesky/Images.xcassets/SplashScreenBackground.imageset/icon 1.pngbin0 -> 1172966 bytes
-rw-r--r--ios/bluesky/Images.xcassets/SplashScreenBackground.imageset/icon 2.pngbin0 -> 1172966 bytes
-rw-r--r--ios/bluesky/Images.xcassets/SplashScreenBackground.imageset/icon.pngbin0 -> 1172966 bytes
-rw-r--r--ios/bluesky/Info.plist100
-rw-r--r--ios/bluesky/SplashScreen.storyboard52
-rw-r--r--ios/bluesky/Supporting/Expo.plist16
-rw-r--r--ios/bluesky/bluesky.entitlements8
-rw-r--r--ios/bluesky/main.m9
-rw-r--r--ios/bluesky/noop-file.swift4
31 files changed, 440 insertions, 0 deletions
diff --git a/ios/bluesky/AppDelegate.h b/ios/bluesky/AppDelegate.h
new file mode 100644
index 000000000..eaba2fa40
--- /dev/null
+++ b/ios/bluesky/AppDelegate.h
@@ -0,0 +1,7 @@
+#import <RCTAppDelegate.h>
+#import <UIKit/UIKit.h>
+#import <Expo/Expo.h>
+
+@interface AppDelegate : EXAppDelegateWrapper
+
+@end
\ No newline at end of file
diff --git a/ios/bluesky/AppDelegate.mm b/ios/bluesky/AppDelegate.mm
new file mode 100644
index 000000000..a358131c0
--- /dev/null
+++ b/ios/bluesky/AppDelegate.mm
@@ -0,0 +1,72 @@
+#import "AppDelegate.h"
+
+#import <React/RCTBundleURLProvider.h>
+#import <React/RCTLinkingManager.h>
+
+#import <TSBackgroundFetch/TSBackgroundFetch.h>
+
+@implementation AppDelegate
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+  self.moduleName = @"main";
+
+  // You can add your custom initial props in the dictionary below.
+  // They will be passed down to the ViewController used by React Native.
+  self.initialProps = @{};
+  
+  // Register BackgroundFetch
+  [[TSBackgroundFetch sharedInstance] didFinishLaunching];
+
+  return [super application:application didFinishLaunchingWithOptions:launchOptions];
+}
+
+- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
+{
+#if DEBUG
+  return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
+#else
+  return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
+#endif
+}
+
+/// This method controls whether the `concurrentRoot`feature of React18 is turned on or off.
+///
+/// @see: https://reactjs.org/blog/2022/03/29/react-v18.html
+/// @note: This requires to be rendering on Fabric (i.e. on the New Architecture).
+/// @return: `true` if the `concurrentRoot` feature is enabled. Otherwise, it returns `false`.
+- (BOOL)concurrentRootEnabled
+{
+  return true;
+}
+
+// Linking API
+- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
+  return [super application:application openURL:url options:options] || [RCTLinkingManager application:application openURL:url options:options];
+}
+
+// Universal Links
+- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
+  BOOL result = [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
+  return [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler] || result;
+}
+
+// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
+- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
+{
+  return [super application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
+}
+
+// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
+- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
+{
+  return [super application:application didFailToRegisterForRemoteNotificationsWithError:error];
+}
+
+// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
+- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
+{
+  return [super application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
+}
+
+@end
\ No newline at end of file
diff --git a/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@1x.png b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@1x.png
new file mode 100644
index 000000000..fea9a3533
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@1x.png
Binary files differdiff --git a/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@2x.png b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@2x.png
new file mode 100644
index 000000000..299b8c100
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@2x.png
Binary files differdiff --git a/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@3x.png b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@3x.png
new file mode 100644
index 000000000..30fe7e1f0
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@3x.png
Binary files differdiff --git a/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@1x.png b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@1x.png
new file mode 100644
index 000000000..ba88e1111
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@1x.png
Binary files differdiff --git a/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@2x.png b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@2x.png
new file mode 100644
index 000000000..093b2f931
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@2x.png
Binary files differdiff --git a/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@3x.png b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@3x.png
new file mode 100644
index 000000000..f391f3662
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@3x.png
Binary files differdiff --git a/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@1x.png b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@1x.png
new file mode 100644
index 000000000..299b8c100
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@1x.png
Binary files differdiff --git a/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@2x.png b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@2x.png
new file mode 100644
index 000000000..140a420ab
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@2x.png
Binary files differdiff --git a/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@3x.png b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@3x.png
new file mode 100644
index 000000000..f8e459304
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@3x.png
Binary files differdiff --git a/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-60x60@2x.png b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-60x60@2x.png
new file mode 100644
index 000000000..f8e459304
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-60x60@2x.png
Binary files differdiff --git a/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-60x60@3x.png b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-60x60@3x.png
new file mode 100644
index 000000000..0a2ce9f15
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-60x60@3x.png
Binary files differdiff --git a/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-76x76@1x.png b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-76x76@1x.png
new file mode 100644
index 000000000..cb5bd1988
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-76x76@1x.png
Binary files differdiff --git a/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-76x76@2x.png b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-76x76@2x.png
new file mode 100644
index 000000000..a416fe21a
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-76x76@2x.png
Binary files differdiff --git a/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-83.5x83.5@2x.png b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-83.5x83.5@2x.png
new file mode 100644
index 000000000..4263af789
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/AppIcon.appiconset/App-Icon-83.5x83.5@2x.png
Binary files differdiff --git a/ios/bluesky/Images.xcassets/AppIcon.appiconset/Contents.json b/ios/bluesky/Images.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 000000000..f920cb0ec
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,122 @@
+{
+  "images": [
+    {
+      "idiom": "iphone",
+      "size": "20x20",
+      "scale": "2x",
+      "filename": "App-Icon-20x20@2x.png"
+    },
+    {
+      "idiom": "iphone",
+      "size": "20x20",
+      "scale": "3x",
+      "filename": "App-Icon-20x20@3x.png"
+    },
+    {
+      "idiom": "iphone",
+      "size": "29x29",
+      "scale": "1x",
+      "filename": "App-Icon-29x29@1x.png"
+    },
+    {
+      "idiom": "iphone",
+      "size": "29x29",
+      "scale": "2x",
+      "filename": "App-Icon-29x29@2x.png"
+    },
+    {
+      "idiom": "iphone",
+      "size": "29x29",
+      "scale": "3x",
+      "filename": "App-Icon-29x29@3x.png"
+    },
+    {
+      "idiom": "iphone",
+      "size": "40x40",
+      "scale": "2x",
+      "filename": "App-Icon-40x40@2x.png"
+    },
+    {
+      "idiom": "iphone",
+      "size": "40x40",
+      "scale": "3x",
+      "filename": "App-Icon-40x40@3x.png"
+    },
+    {
+      "idiom": "iphone",
+      "size": "60x60",
+      "scale": "2x",
+      "filename": "App-Icon-60x60@2x.png"
+    },
+    {
+      "idiom": "iphone",
+      "size": "60x60",
+      "scale": "3x",
+      "filename": "App-Icon-60x60@3x.png"
+    },
+    {
+      "idiom": "ipad",
+      "size": "20x20",
+      "scale": "1x",
+      "filename": "App-Icon-20x20@1x.png"
+    },
+    {
+      "idiom": "ipad",
+      "size": "20x20",
+      "scale": "2x",
+      "filename": "App-Icon-20x20@2x.png"
+    },
+    {
+      "idiom": "ipad",
+      "size": "29x29",
+      "scale": "1x",
+      "filename": "App-Icon-29x29@1x.png"
+    },
+    {
+      "idiom": "ipad",
+      "size": "29x29",
+      "scale": "2x",
+      "filename": "App-Icon-29x29@2x.png"
+    },
+    {
+      "idiom": "ipad",
+      "size": "40x40",
+      "scale": "1x",
+      "filename": "App-Icon-40x40@1x.png"
+    },
+    {
+      "idiom": "ipad",
+      "size": "40x40",
+      "scale": "2x",
+      "filename": "App-Icon-40x40@2x.png"
+    },
+    {
+      "idiom": "ipad",
+      "size": "76x76",
+      "scale": "1x",
+      "filename": "App-Icon-76x76@1x.png"
+    },
+    {
+      "idiom": "ipad",
+      "size": "76x76",
+      "scale": "2x",
+      "filename": "App-Icon-76x76@2x.png"
+    },
+    {
+      "idiom": "ipad",
+      "size": "83.5x83.5",
+      "scale": "2x",
+      "filename": "App-Icon-83.5x83.5@2x.png"
+    },
+    {
+      "idiom": "ios-marketing",
+      "size": "1024x1024",
+      "scale": "1x",
+      "filename": "ItunesArtwork@2x.png"
+    }
+  ],
+  "info": {
+    "version": 1,
+    "author": "expo"
+  }
+}
\ No newline at end of file
diff --git a/ios/bluesky/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png b/ios/bluesky/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png
new file mode 100644
index 000000000..35e5b79b2
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png
Binary files differdiff --git a/ios/bluesky/Images.xcassets/Contents.json b/ios/bluesky/Images.xcassets/Contents.json
new file mode 100644
index 000000000..ed285c2e5
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "expo"
+  }
+}
diff --git a/ios/bluesky/Images.xcassets/SplashScreen.imageset/Contents.json b/ios/bluesky/Images.xcassets/SplashScreen.imageset/Contents.json
new file mode 100644
index 000000000..3cf848977
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/SplashScreen.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images": [
+    {
+      "idiom": "universal",
+      "filename": "image.png",
+      "scale": "1x"
+    },
+    {
+      "idiom": "universal",
+      "scale": "2x"
+    },
+    {
+      "idiom": "universal",
+      "scale": "3x"
+    }
+  ],
+  "info": {
+    "version": 1,
+    "author": "expo"
+  }
+}
\ No newline at end of file
diff --git a/ios/bluesky/Images.xcassets/SplashScreen.imageset/image.png b/ios/bluesky/Images.xcassets/SplashScreen.imageset/image.png
new file mode 100644
index 000000000..e0e67b90a
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/SplashScreen.imageset/image.png
Binary files differdiff --git a/ios/bluesky/Images.xcassets/SplashScreenBackground.imageset/Contents.json b/ios/bluesky/Images.xcassets/SplashScreenBackground.imageset/Contents.json
new file mode 100644
index 000000000..ded1a4df0
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/SplashScreenBackground.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "icon 2.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "icon.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "icon 1.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/ios/bluesky/Images.xcassets/SplashScreenBackground.imageset/icon 1.png b/ios/bluesky/Images.xcassets/SplashScreenBackground.imageset/icon 1.png
new file mode 100644
index 000000000..1dda9a342
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/SplashScreenBackground.imageset/icon 1.png
Binary files differdiff --git a/ios/bluesky/Images.xcassets/SplashScreenBackground.imageset/icon 2.png b/ios/bluesky/Images.xcassets/SplashScreenBackground.imageset/icon 2.png
new file mode 100644
index 000000000..1dda9a342
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/SplashScreenBackground.imageset/icon 2.png
Binary files differdiff --git a/ios/bluesky/Images.xcassets/SplashScreenBackground.imageset/icon.png b/ios/bluesky/Images.xcassets/SplashScreenBackground.imageset/icon.png
new file mode 100644
index 000000000..1dda9a342
--- /dev/null
+++ b/ios/bluesky/Images.xcassets/SplashScreenBackground.imageset/icon.png
Binary files differdiff --git a/ios/bluesky/Info.plist b/ios/bluesky/Info.plist
new file mode 100644
index 000000000..eb3798dc3
--- /dev/null
+++ b/ios/bluesky/Info.plist
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>BGTaskSchedulerPermittedIdentifiers</key>
+    <array>
+      <string>com.transistorsoft.fetch</string>
+    </array>
+    <key>CFBundleDevelopmentRegion</key>
+    <string>$(DEVELOPMENT_LANGUAGE)</string>
+    <key>CFBundleDisplayName</key>
+    <string>Bluesky</string>
+    <key>CFBundleExecutable</key>
+    <string>$(EXECUTABLE_NAME)</string>
+    <key>CFBundleIdentifier</key>
+    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+    <key>CFBundleInfoDictionaryVersion</key>
+    <string>6.0</string>
+    <key>CFBundleName</key>
+    <string>$(PRODUCT_NAME)</string>
+    <key>CFBundlePackageType</key>
+    <string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
+    <key>CFBundleShortVersionString</key>
+    <string>1.7</string>
+    <key>CFBundleSignature</key>
+    <string>????</string>
+    <key>CFBundleURLTypes</key>
+    <array>
+      <dict>
+        <key>CFBundleURLSchemes</key>
+        <array>
+          <string>xyz.blueskyweb.app</string>
+        </array>
+      </dict>
+      <dict>
+        <key>CFBundleURLSchemes</key>
+        <array>
+          <string>exp+bluesky</string>
+        </array>
+      </dict>
+    </array>
+    <key>CFBundleVersion</key>
+    <string>1</string>
+    <key>ITSAppUsesNonExemptEncryption</key>
+    <false/>
+    <key>LSRequiresIPhoneOS</key>
+    <true/>
+    <key>NSAppTransportSecurity</key>
+    <dict>
+      <key>NSAllowsArbitraryLoads</key>
+      <true/>
+      <key>NSExceptionDomains</key>
+      <dict>
+        <key>localhost</key>
+        <dict>
+          <key>NSExceptionAllowsInsecureHTTPLoads</key>
+          <true/>
+        </dict>
+      </dict>
+    </dict>
+    <key>NSCameraUsageDescription</key>
+    <string>Used to take pictures and videos when composing posts, choosing avatars, and so on.</string>
+    <key>NSMicrophoneUsageDescription</key>
+    <string>Used to take videos when composing posts.</string>
+    <key>NSLocationWhenInUseUsageDescription</key>
+    <string></string>
+    <key>NSPhotoLibraryUsageDescription</key>
+    <string>Used to upload pictures and videos when composing posts, choosing avatars, and so on.</string>
+    <key>UIBackgroundModes</key>
+    <array>
+      <string>fetch</string>
+    </array>
+    <key>UILaunchStoryboardName</key>
+    <string>SplashScreen</string>
+    <key>UIRequiredDeviceCapabilities</key>
+    <array>
+      <string>armv7</string>
+    </array>
+    <key>UIRequiresFullScreen</key>
+    <true/>
+    <key>UIStatusBarStyle</key>
+    <string>UIStatusBarStyleDefault</string>
+    <key>UISupportedInterfaceOrientations</key>
+    <array>
+      <string>UIInterfaceOrientationPortrait</string>
+    </array>
+    <key>UISupportedInterfaceOrientations~ipad</key>
+    <array>
+      <string>UIInterfaceOrientationLandscapeLeft</string>
+      <string>UIInterfaceOrientationLandscapeRight</string>
+      <string>UIInterfaceOrientationPortrait</string>
+    </array>
+    <key>UIUserInterfaceStyle</key>
+    <string>Light</string>
+    <key>UIViewControllerBasedStatusBarAppearance</key>
+    <false/>
+    <key>ITSAppUsesNonExemptEncryption</key>
+    <false/>
+  </dict>
+</plist>
\ No newline at end of file
diff --git a/ios/bluesky/SplashScreen.storyboard b/ios/bluesky/SplashScreen.storyboard
new file mode 100644
index 000000000..36ea46d75
--- /dev/null
+++ b/ios/bluesky/SplashScreen.storyboard
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="21507" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="EXPO-VIEWCONTROLLER-1">
+    <device id="retina5_5" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <scenes>
+        <!--View Controller-->
+        <scene sceneID="EXPO-SCENE-1">
+            <objects>
+                <viewController storyboardIdentifier="SplashScreenViewController" id="EXPO-VIEWCONTROLLER-1" sceneMemberID="viewController">
+                    <view key="view" userInteractionEnabled="NO" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="EXPO-ContainerView" userLabel="ContainerView">
+                        <rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <subviews>
+                            <imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" insetsLayoutMarginsFromSafeArea="NO" image="SplashScreenBackground" translatesAutoresizingMaskIntoConstraints="NO" id="EXPO-SplashScreenBackground" userLabel="SplashScreenBackground">
+                                <rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
+                            </imageView>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="SplashScreen" translatesAutoresizingMaskIntoConstraints="NO" id="EXPO-SplashScreen" userLabel="SplashScreen">
+                                <rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
+                            </imageView>
+                        </subviews>
+                        <viewLayoutGuide key="safeArea" id="Rmq-lb-GrQ"/>
+                        <constraints>
+                            <constraint firstItem="EXPO-SplashScreenBackground" firstAttribute="top" secondItem="EXPO-ContainerView" secondAttribute="top" id="1gX-mQ-vu6"/>
+                            <constraint firstItem="EXPO-SplashScreen" firstAttribute="top" secondItem="EXPO-ContainerView" secondAttribute="top" id="2VS-Uz-0LU"/>
+                            <constraint firstItem="EXPO-SplashScreen" firstAttribute="leading" secondItem="EXPO-ContainerView" secondAttribute="leading" id="61d16215e44b98e39d0a2c74fdbfaaa22601b12c"/>
+                            <constraint firstItem="EXPO-SplashScreenBackground" firstAttribute="leading" secondItem="EXPO-ContainerView" secondAttribute="leading" id="6tX-OG-Sck"/>
+                            <constraint firstItem="EXPO-SplashScreen" firstAttribute="top" secondItem="EXPO-ContainerView" secondAttribute="top" id="83fcb9b545b870ba44c24f0feeb116490c499c52"/>
+                            <constraint firstItem="EXPO-SplashScreenBackground" firstAttribute="trailing" secondItem="EXPO-ContainerView" secondAttribute="trailing" id="ABX-8g-7v4"/>
+                            <constraint firstItem="EXPO-SplashScreen" firstAttribute="trailing" secondItem="EXPO-ContainerView" secondAttribute="trailing" id="I6l-TP-6fn"/>
+                            <constraint firstItem="EXPO-SplashScreen" firstAttribute="leading" secondItem="EXPO-ContainerView" secondAttribute="leading" id="LhH-Ei-DKo"/>
+                            <constraint firstItem="EXPO-SplashScreen" firstAttribute="bottom" secondItem="EXPO-ContainerView" secondAttribute="bottom" id="d6a0be88096b36fb132659aa90203d39139deda9"/>
+                            <constraint firstItem="EXPO-SplashScreen" firstAttribute="trailing" secondItem="EXPO-ContainerView" secondAttribute="trailing" id="f934da460e9ab5acae3ad9987d5b676a108796c1"/>
+                            <constraint firstItem="EXPO-SplashScreenBackground" firstAttribute="bottom" secondItem="EXPO-ContainerView" secondAttribute="bottom" id="jkI-2V-eW5"/>
+                            <constraint firstItem="EXPO-SplashScreen" firstAttribute="bottom" secondItem="EXPO-ContainerView" secondAttribute="bottom" id="nbp-HC-eaG"/>
+                        </constraints>
+                    </view>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="EXPO-PLACEHOLDER-1" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="140.625" y="129.4921875"/>
+        </scene>
+    </scenes>
+    <resources>
+        <image name="SplashScreen" width="600" height="900"/>
+        <image name="SplashScreenBackground" width="1" height="1"/>
+    </resources>
+</document>
diff --git a/ios/bluesky/Supporting/Expo.plist b/ios/bluesky/Supporting/Expo.plist
new file mode 100644
index 000000000..44b3d2428
--- /dev/null
+++ b/ios/bluesky/Supporting/Expo.plist
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>EXUpdatesCheckOnLaunch</key>
+    <string>ALWAYS</string>
+    <key>EXUpdatesEnabled</key>
+    <true/>
+    <key>EXUpdatesLaunchWaitMs</key>
+    <integer>0</integer>
+    <key>EXUpdatesSDKVersion</key>
+    <string>48.0.0</string>
+    <key>EXUpdatesURL</key>
+    <string>https://exp.host/@arrygoo/bluesky</string>
+  </dict>
+</plist> 
\ No newline at end of file
diff --git a/ios/bluesky/bluesky.entitlements b/ios/bluesky/bluesky.entitlements
new file mode 100644
index 000000000..018a6e20c
--- /dev/null
+++ b/ios/bluesky/bluesky.entitlements
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>aps-environment</key>
+    <string>development</string>
+  </dict>
+</plist>
\ No newline at end of file
diff --git a/ios/bluesky/main.m b/ios/bluesky/main.m
new file mode 100644
index 000000000..b1df44b95
--- /dev/null
+++ b/ios/bluesky/main.m
@@ -0,0 +1,9 @@
+#import <UIKit/UIKit.h>
+
+#import "AppDelegate.h"
+
+int main(int argc, char * argv[]) {
+  @autoreleasepool {
+    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+  }
+}
diff --git a/ios/bluesky/noop-file.swift b/ios/bluesky/noop-file.swift
new file mode 100644
index 000000000..9835ba300
--- /dev/null
+++ b/ios/bluesky/noop-file.swift
@@ -0,0 +1,4 @@
+//
+// @generated
+// A blank Swift file must be created for native modules with Swift files to work correctly.
+//
\ No newline at end of file