diff options
Diffstat (limited to 'Juick')
-rw-r--r-- | Juick/CoreDataStack.h | 189 | ||||
-rw-r--r-- | Juick/CoreDataStack.m | 133 | ||||
-rw-r--r-- | Juick/Views/BubbleMessageCell.xib | 18 | ||||
-rw-r--r-- | Juick/Views/ConversationCell.xib | 7 | ||||
-rw-r--r-- | Juick/Views/MessageInputView.xib | 7 | ||||
-rw-r--r-- | Juick/buttons.png | bin | 2392 -> 0 bytes |
6 files changed, 15 insertions, 339 deletions
diff --git a/Juick/CoreDataStack.h b/Juick/CoreDataStack.h deleted file mode 100644 index b430654..0000000 --- a/Juick/CoreDataStack.h +++ /dev/null @@ -1,189 +0,0 @@ -// -// CoreDataStack.h -// Juick -// -// Created by Vitaly Takmazov on 15/10/2017. -// Copyright © 2017 com.juick. All rights reserved. -// - -@import Foundation; -@import CoreData; - -NS_ASSUME_NONNULL_BEGIN - -API_AVAILABLE(macosx(10.12),ios(10.0),tvos(10.0),watchos(3.0)) -@interface CoreDataStack : NSObject - -/** - The default directory for the persistent stores on the current platform. - @return An `NSURL` for the directory containing the persistent store(s). If the - persistent store does not exist it will be created by default in this location - when loaded. - */ -+ (NSURL *)defaultDirectoryURL; - -///--------------------- -/// @name Properties -///--------------------- - -/** - A read-only flag indicating if the persistent store is loaded. - */ -@property (readonly, assign, getter=isStoreLoaded) BOOL storeLoaded; - -/** - The managed object context associated with the main queue (read-only). To - perform tasks on a private background queue see `performBackgroundTask:` and - `newPrivateContext`. - The context is configured to be generational and to automatically consume save - notifications from other contexts. - */ -@property (readonly, strong) NSManagedObjectContext *viewContext; - -/** - The `URL` of the persistent store for this Core Data Stack. If there are more - than one stores this property returns the first store it finds. The store may - not yet exist. It will be created at this URL by default when first loaded. - - This is a readonly property to create a persistent store in a different - location use `loadStoreAtURL:withCompletionHandler`. To move an existing - persistent store use `replacePersistentStoreAtURL:withPersistentStoreFromURL:`. - */ -@property (readonly, copy) NSURL *storeURL; - -/** - A flag that indicates whether this store is read-only. Set this value to YES - before loading the persistent store if you want a read-only store (for example - if you are loading a store from the application bundle). - - Default is NO. - */ -@property (assign, getter=isReadOnly) BOOL readOnly; - -/** - A flag that indicates whether the store is added asynchronously. Set this - value before loading the persistent store. - - Default is YES. - */ -@property (assign) BOOL shouldAddStoreAsynchronously; - -/** - A flag that indicates whether the store should be migrated - automatically if the store model version does not match the - coordinators model version. - - Set this value before loading the persistent store. - Default is YES. - */ -@property (assign) BOOL shouldMigrateStoreAutomatically; - -/** - A flag that indicates whether a mapping model should be inferred - when migrating a store. - Set this value before loading the persistent store. - - Default is YES. - */ -@property (assign) BOOL shouldInferMappingModelAutomatically; - -///--------------------- -/// @name Initialization -///--------------------- - -- (instancetype)init NS_UNAVAILABLE; - -/** - Creates and returns a `CoreDataController` object. This is the designated - initializer for the class. It creates the managed object model, persistent - store coordinator and main managed object context but does not load the - persistent store. - - @param name The name of the `NSManagedObjectModel` and by default the name used - for the persistent store - @return A `CoreDataController` object initialized with the given name. - */ -- (instancetype)initWithName:(NSString *)name NS_DESIGNATED_INITIALIZER; - -///--------------------------------- -/// @name Loading a Persistent Store -///--------------------------------- - -/** - Load the persistent store. - @param handler This handler block is executed on the calling thread when the - loading of the persistent store has completed. - - To override the default name and location of the persistent store use - `loadStoreAtURL:withCompletionHandler:`. - */ -- (void)loadStoreWithCompletionHandler:(void(^)(NSError *))handler; - -/** - Load the persistent store. - @param storeURL The URL for the location of the persistent store. It will be created if it does not exist. - @param handler This handler block is executed on the calling thread when the - loading of the persistent store has completed. - */ -- (void)loadStoreAtURL:(NSURL *)storeURL withCompletionHandler:(void(^)(NSError * _Nullable))handler; - -///---------------------------------- -/// @name Managing a Persistent Store -///---------------------------------- - -/** - A flag indicating if the persistent store exists at the specified URL. - @param storeURL An `NSURL` object for the location of the peristent store. - @return YES if a file exists at the specified URL otherwise NO. - @warning This method checks if a file exists at the specified location but - does not verify if it is a valid persistent store. - */ -- (BOOL)persistentStoreExistsAtURL:(NSURL *)storeURL; - -/** - Replace a persistent store. - @param destinationURL An `NSURL` for the persistent store to be replaced. - @param sourceURL An `NSURL` for the source persistent store. - @return A flag indicating if the operation was successful. - */ -- (BOOL)replacePersistentStoreAtURL:(NSURL *)destinationURL withPersistentStoreFromURL:(NSURL *)sourceURL; - -/** - Destroy a persistent store. - @param storeURL An `NSURL` for the persistent store to be destroyed. - @return A flag indicating if the operation was successful. - */ -- (BOOL)destroyPersistentStoreAtURL:(NSURL *)storeURL; - -///---------------------------------- -/// @name Performing Background tasks -///---------------------------------- - -/** - Execute a block on a new private queue context. - @param block A block to execute on a newly created private context. The context - is passed to the block as a paramater. - */ -- (void)performBackgroundTask:(void(^)(NSManagedObjectContext *))block; - -/** - Create and return a new private queue `NSManagedObjectContext`. The new context - is set to consume `NSManagedObjectContextSave` broadcasts automatically. - @return A new private managed object context. - */ -- (NSManagedObjectContext *)newPrivateContext NS_RETURNS_RETAINED; - -///------------------------ -/// @name NSManagedObjectID -///------------------------ - -/** - Return an object ID for the specified URI representation if a matching - store is available. - @param url An `NSURL` containing a URI of a managed object. - @return An `NSManagedObjectID` or `nil`. - */ -- (NSManagedObjectID *)managedObjectIDForURIRepresentation:(NSURL *)url; - -@end -NS_ASSUME_NONNULL_END diff --git a/Juick/CoreDataStack.m b/Juick/CoreDataStack.m deleted file mode 100644 index 6122731..0000000 --- a/Juick/CoreDataStack.m +++ /dev/null @@ -1,133 +0,0 @@ -// -// CoreDataStack.m -// Juick -// -// Created by Vitaly Takmazov on 15/10/2017. -// Copyright © 2017 com.juick. All rights reserved. -// - -#import "CoreDataStack.h" - -@interface CoreDataStack () -@property (nonatomic, getter=isStoreLoaded) BOOL storeLoaded; -@property (nonatomic, strong) NSPersistentContainer *persistentContainer; -@end - -@implementation CoreDataStack - -+ (NSURL *)defaultDirectoryURL { - return [NSPersistentContainer defaultDirectoryURL]; -} - -- (instancetype)initWithName:(NSString *)name { - - NSManagedObjectModel *mom = [NSManagedObjectModel mergedModelFromBundles:nil]; - if (mom == nil) return nil; - - self = [super init]; - if (self) { - _storeLoaded = NO; - _shouldAddStoreAsynchronously = YES; - _shouldMigrateStoreAutomatically = YES; - _shouldInferMappingModelAutomatically = YES; - _readOnly = NO; - _persistentContainer = [NSPersistentContainer persistentContainerWithName:name managedObjectModel:mom]; - _persistentContainer.viewContext.automaticallyMergesChangesFromParent = YES; - } - return self; -} - -- (void)loadStoreWithCompletionHandler:(void(^)(NSError *))handler { - - [self loadStoreAtURL:self.storeURL withCompletionHandler:handler]; -} - -- (void)loadStoreAtURL:(NSURL *)storeURL withCompletionHandler:(void(^)(NSError *))handler { - - if (!self.persistentContainer) { - NSError *error = [NSError errorWithDomain:NSCocoaErrorDomain code:NSNotFound userInfo:nil]; - if (handler) { - dispatch_async(dispatch_get_main_queue(), ^{ - handler(error); - }); - } - return; - } - - self.persistentContainer.persistentStoreDescriptions = @[[self storeDescriptionWithURL:storeURL]]; - [self.persistentContainer loadPersistentStoresWithCompletionHandler: - ^(NSPersistentStoreDescription *storeDescription, NSError *error) { - if (error == nil) { - self.storeLoaded = YES; - } - if (handler) { - dispatch_async(dispatch_get_main_queue(), ^{ - handler(error); - }); - } - }]; -} - -- (BOOL)persistentStoreExistsAtURL:(NSURL *)storeURL { - - if (storeURL.isFileURL && - [NSFileManager.defaultManager fileExistsAtPath:storeURL.path]) { - return YES; - } - return NO; -} - -- (NSURL *)storeURL { - NSArray *descriptions = self.persistentContainer.persistentStoreDescriptions; - NSPersistentStoreDescription *description = [descriptions firstObject]; - return description.URL; -} - -- (BOOL)destroyPersistentStoreAtURL:(NSURL *)storeURL { - - NSError *error = nil; - BOOL result = [self.persistentContainer.persistentStoreCoordinator destroyPersistentStoreAtURL:storeURL withType:NSSQLiteStoreType options:nil error:&error]; - return result; -} - -- (BOOL)replacePersistentStoreAtURL:(NSURL *)destinationURL withPersistentStoreFromURL:(NSURL *)sourceURL { - - NSError *error = nil; - BOOL result = [self.persistentContainer.persistentStoreCoordinator replacePersistentStoreAtURL:destinationURL destinationOptions:nil withPersistentStoreFromURL:sourceURL sourceOptions:nil storeType:NSSQLiteStoreType error:&error]; - return result; -} - -- (NSManagedObjectContext *)viewContext { - - return self.persistentContainer.viewContext; -} - -- (NSManagedObjectContext *)newPrivateContext { - - return [self.persistentContainer newBackgroundContext]; -} - -- (void)performBackgroundTask:(void(^)(NSManagedObjectContext *))block { - - [self.persistentContainer performBackgroundTask:block]; -} - -- (NSManagedObjectID *)managedObjectIDForURIRepresentation:(NSURL *)url { - return [self.persistentContainer.persistentStoreCoordinator managedObjectIDForURIRepresentation:url]; -} - -#pragma mark - -#pragma mark === Private methods === -#pragma mark - - -- (NSPersistentStoreDescription *)storeDescriptionWithURL:(NSURL *)URL { - - NSPersistentStoreDescription *description = [NSPersistentStoreDescription persistentStoreDescriptionWithURL:URL]; - description.shouldAddStoreAsynchronously = self.shouldAddStoreAsynchronously; - description.shouldMigrateStoreAutomatically = self.shouldMigrateStoreAutomatically; - description.shouldInferMappingModelAutomatically = self.shouldInferMappingModelAutomatically; - description.readOnly = self.isReadOnly; - return description; -} - -@end diff --git a/Juick/Views/BubbleMessageCell.xib b/Juick/Views/BubbleMessageCell.xib index b88ab17..3f9670e 100644 --- a/Juick/Views/BubbleMessageCell.xib +++ b/Juick/Views/BubbleMessageCell.xib @@ -1,25 +1,25 @@ <?xml version="1.0" encoding="UTF-8"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13771" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES"> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES"> <device id="retina4_7" orientation="portrait"> <adaptation id="fullscreen"/> </device> <dependencies> <deployment identifier="iOS"/> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13772"/> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14283.14"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="bubbleMessageCell" rowHeight="192" id="8qR-do-bgA" customClass="BubbleMessageCell"> - <rect key="frame" x="0.0" y="0.0" width="320" height="192"/> + <rect key="frame" x="0.0" y="0.0" width="377" height="192"/> <autoresizingMask key="autoresizingMask"/> <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="8qR-do-bgA" id="PhM-Oe-eqm"> - <rect key="frame" x="0.0" y="0.0" width="320" height="191.5"/> + <rect key="frame" x="0.0" y="0.0" width="377" height="191.5"/> <autoresizingMask key="autoresizingMask"/> <subviews> <stackView opaque="NO" contentMode="scaleToFill" distribution="fillProportionally" alignment="center" spacing="12" translatesAutoresizingMaskIntoConstraints="NO" id="W9k-Ah-WF5"> - <rect key="frame" x="6" y="6" width="308" height="179.5"/> + <rect key="frame" x="6" y="6" width="365" height="179.5"/> <subviews> <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" spacing="6" translatesAutoresizingMaskIntoConstraints="NO" id="qtf-Wj-Irh"> <rect key="frame" x="0.0" y="60.5" width="42" height="58.5"/> @@ -43,16 +43,16 @@ </constraints> </stackView> <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="12" translatesAutoresizingMaskIntoConstraints="NO" id="xm7-By-6oe"> - <rect key="frame" x="54" y="0.0" width="254" height="179.5"/> + <rect key="frame" x="54" y="10.5" width="311" height="158.5"/> <subviews> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" text="ermine" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="UEj-yl-U0d"> - <rect key="frame" x="0.0" y="0.0" width="254" height="0.0"/> + <rect key="frame" x="0.0" y="0.0" width="311" height="16"/> <fontDescription key="fontDescription" style="UICTFontTextStyleFootnote"/> <color key="textColor" cocoaTouchSystemColor="darkTextColor"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="1000" horizontalCompressionResistancePriority="751" verticalCompressionResistancePriority="1000" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yf3-FC-T1Y" customClass="FixedLabel"> - <rect key="frame" x="0.0" y="12" width="254" height="167.5"/> + <rect key="frame" x="0.0" y="28" width="311" height="130.5"/> <string key="text">Lorem sdsdasds sdsada ddas dsad asdsadas dasd asdsa sadsa dasdsad asd asdas dasd asdas dasd asdas dasdasdasd asdasdasdadasdasd asdasd asdas dasdsa dasdasdasdasdas dasdas</string> <fontDescription key="fontDescription" style="UICTFontTextStyleBody"/> <color key="textColor" cocoaTouchSystemColor="darkTextColor"/> @@ -79,7 +79,7 @@ <outlet property="name" destination="UEj-yl-U0d" id="unG-q9-Kwv"/> <outlet property="unreadMarker" destination="5rl-Qo-5oW" id="an8-JJ-Gbb"/> </connections> - <point key="canvasLocation" x="461" y="234"/> + <point key="canvasLocation" x="610.39999999999998" y="216.79160419790108"/> </tableViewCell> </objects> </document> diff --git a/Juick/Views/ConversationCell.xib b/Juick/Views/ConversationCell.xib index 504f7a4..65f9766 100644 --- a/Juick/Views/ConversationCell.xib +++ b/Juick/Views/ConversationCell.xib @@ -1,12 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13771" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES"> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES"> <device id="retina4_7" orientation="portrait"> <adaptation id="fullscreen"/> </device> <dependencies> <deployment identifier="iOS"/> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13772"/> - <capability name="Constraints to layout margins" minToolsVersion="6.0"/> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14283.14"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> @@ -77,7 +76,7 @@ <outlet property="lastMessage" destination="EiA-lG-gV5" id="Eq9-zQ-ivW"/> <outlet property="unreadMarker" destination="jW2-kr-sJn" id="E5Q-wn-yln"/> </connections> - <point key="canvasLocation" x="-1164" y="-1"/> + <point key="canvasLocation" x="-1846" y="27"/> </tableViewCell> </objects> </document> diff --git a/Juick/Views/MessageInputView.xib b/Juick/Views/MessageInputView.xib index 70fcdef..240391c 100644 --- a/Juick/Views/MessageInputView.xib +++ b/Juick/Views/MessageInputView.xib @@ -1,12 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="retina4_7" orientation="portrait"> <adaptation id="fullscreen"/> </device> <dependencies> <deployment identifier="iOS"/> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/> - <capability name="Constraints to layout margins" minToolsVersion="6.0"/> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14283.14"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> @@ -53,7 +52,7 @@ <outlet property="bottomConstraint" destination="hsT-4s-U3s" id="b1V-Gk-1At"/> <outlet property="textView" destination="Dkb-8O-5u6" id="6YC-Bn-7P6"/> </connections> - <point key="canvasLocation" x="-85" y="105"/> + <point key="canvasLocation" x="-387" y="95"/> </visualEffectView> </objects> </document> diff --git a/Juick/buttons.png b/Juick/buttons.png Binary files differdeleted file mode 100644 index 14879e4..0000000 --- a/Juick/buttons.png +++ /dev/null |