All the new features in iOS 11

Drag and drop
In iOS 11 https://en.wikipedia.org/wiki/Apple_File_System
app store multiple days / user reviews
iOS 11 – 64bit only. 32 bit apps not supported anymore
High sierra last release to support 32bit release
Jan 2018 – 64bit only app store
Xcode 9 is much faster
Semantic highlight – useful for functions opening and closing braces
Brand new refactoring system (swift, c, c++, objective c)
Xcode 9 has swift 4
Swift – String easier to use, unicode correctness
Codable prototype
40% faster Swift/Objective C projects
Searching and indexing faster
Github integration (not sure if bitbucket is supported)
Undefined Behavior sanitizer
Main Thread API Checker
Xcode server Built-in
Xcodebuild multiple destinations at the same time e.g. iPhone 7, iPhone 5s
Simulator multiple sessions e.g. watch, iPhone booted at the same time.
Xcode 9, wireless development (USB, WIFI or ethernet)
Visual Debugging on ViewControllers
Indexing while building (background)
wireless with other apps, quicktime, console and instruments
Drag and drop
Dynamic Type
NSFileCoordinator
Password autofill
DynamicType
Simulator – New bezels (easier to swipe from side)
Files App (to access files)
Document browser
AV route picker
App strip (live content can be rendered)
Send API – app extensions
Camera detects QR codes
HEVC compression
HEIF for images
Depth map in images. Depth is stored in images.
AVCapture/AVDepthData
Vision APIs
Face and landmark detection
Text detection
Object detection
CoreML and image recognition
Machines learning modules will be given access [Caffee]
CoreML convertor tools
1.7 million apps using Metals
Metal 2 [GPU driven rendering / Convolution ML networks]
VR development on the mac
ARKit
Visual Inertial Odometry
Scene Understanding

Snapchat S1 – Read before buying

Snapchat is free and easy to join, the barrier to entry for new entrants is low, and the switching costs to another platform are also low.

Our Daily Active Users may not continue to grow. For example, although Daily Active Users grew by 7% from 143 million Daily Active Users for the quarter ended June 30, 2016 to 153 million Daily Active Users for the quarter ended September 30, 2016, the growth in Daily Active Users was relatively flat in the latter part of the quarter ended September 30, 2016.

Moreover, the majority of our users are 18-34 years old. This demographic may be less brand loyal and more likely to follow trends than other demographics.

Any transition of the cloud services currently provided by Google Cloud to another cloud provider would be difficult to implement and will cause us to incur significant time and expense.

Advertisers may view some of our products as experimental and unproven.

Founders have 10:1 voting ratio.

We began commercial operations in 2011 and for all of our history we have experienced net losses and negative cash flows from operations. As of December 31, 2016, we had an accumulated deficit of $1.2 billion and for the year ended December 31, 2016, we experienced a net loss of $514.6 million.

Swift fundamentals …..

  • Compiled language.
  • Compiles to machine language using LLVM.
  • Swift is strongly and statically typed, meaning that all variables must have a type that is defined or inferred at compile-time and that these types cannot change at run-time 27. Type inference occurs when initializing a variable that has not been explicitly typed, though typing can also be explicitly declared.
    /* example of type inference */
    var hello = "Hello,"
    /* example of explicit typing */
    var world: String
    world = " world!"
    /* valid declaration and assignment */
    var hello_world = hello + world
    /* later, doing this throws a compile-time error */
    hello_world = 125
    
  • Swift has no true primitive types; rather there is only the distinction between named types and compound types 29. The Int, UInt, Float, Double, String, Character and Boolean types, often primitive or basic types in other languages, are all named types in Swift and are all defined in the standard library as structs.
  • Swift also supports the Optional type, which represents a variable that either has a value or has a nil value.
  • Swift has no main method
  • In Swift, switch statements must always be exhaustive (always have a default option) e.g.http://stackoverflow.com/questions/26686542/exhaustive-condition-of-switch-case-in-swift.
  • Do while can be implemented using the repeat statement as follows
    repeat {
    hand.push(draw.pop())
    } while hand.count < 5
    

How to setup your project in Xcode to support multiple frameworks and sub-projects using XCCONFIGS?

If you have multiple targets use config files.

Screen Shot 2016-07-21 at 2.54.11 PM

This is the way to create them. Below is a sample of what you can specify in the config files.

ARCHS = arm64
CLANG_CXX_LANGUAGE_STANDARD = gnu++98
CLANG_CXX_LIBRARY = libstdc++
LD_NO_PIE = NO
OTHER_LDFLAGS = -Wl,-warn_compact_unwind
HEADER_SEARCH_PATHS = ../code/
FRAMEWORK_SEARCH_PATHS = ../debug

One of the things you can notice is that I am specifying that we only support 64bit architecture. You can also specify the framework and header search paths. This will enable you to easily edit the paths. Once you create the config files you need to set this config file to the configuration. This can be done as shown below –

Screen Shot 2016-07-21 at 3.02.11 PM.png

Go to your project -> Click on the configurations and assign the respective config files to that target. Once its done, the targets automatically read these config files. I prefer to have three config files.

  1. project config file – this will provide the generics
  2. debug config file – link to debug files
  3. release config file – link to release files

Next step will be go to your schemes. This can be done as shown below –

Screen Shot 2016-07-21 at 3.05.06 PM.png

Look closely. Uncheck the parallelize build option. If you have multiple frameworks to be built, its better to uncheck this else you will get into a race condition. You can also click on manage schemes button to manage your schemes, incase you want to share schemes between users.

Screen Shot 2016-07-21 at 3.06.35 PM

In case of multiple projects goto build phases and add the target dependency as show below.

Screen Shot 2016-07-21 at 3.08.30 PM.png

This will build the dependent project first and then proceed building yours.

Helpful xcodebuild commands:

  1. NATIVE_ARCH – The architecture on which the current build is taking place.
  2. CURRENT_ARCH – The architecture on which the current build is taking place and if the target is OSX.
  3. NATIVE_ARCH_ACTUAL -The architecture on which the current build is taking place and if the target is OSX.
  4. ARCHS – List of all the architectures.
  5. NATIVE_ARCH_32 _BIT
  6. NATIVE_ARCH_64_BIT
  7. OTHER_SWIFT_FLAGS
  8. GCC_ENABLE_OBJC_GC – Controls whether the project compiles Objective-C source with support for garbage collection.

I hope that gave you a pretty good idea on proceeding with multiple targets and sub projects.