Page tree

Michael O'Brien

Skip to end of metadata
Go to start of metadata

XCode 10.3 on a new MacBook Pro 2019 i9-9980 based 32G machine

When initially building a new project - select the target device (mine is currently IPhone X - or you will get the following error when building

https://stackoverflow.com/questions/36533720/failed-to-find-or-create-execution-context-for-description-ibcocoatouchplatform

XCode 11.0 Oct 2019 - Development

Upgraded from XCode 10.3 to 11.0 to be able to target the new iWatchOS 5.0 for the Series 5 watch - turns out I need the latest XCode 11.0 - upgrade was OK without an upgrade to OSX 10.15 from 10.14.6 yet.  When attempting to rebuild and push my biometric capture app Biometric Dual Heart Rate Streaming from Mobile Devices to the iPhone X - received the following error and stacktrace - I added 2 new plist entries and watched the dialog come up on the device - all is good.

2019-10-03 06:32:27.490354-0400 Biometric[995:530667] This app has attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain both “NSLocationAlwaysAndWhenInUseUsageDescription” and “NSLocationWhenInUseUsageDescription” keys with string values explaining to the user how the app uses this data
2019-10-03 06:32:27.498975-0400 Biometric[995:530667] Pref: 201505
2019-10-03 06:32:27.569096-0400 Biometric[995:530909] [access] This app has crashed because it attempted to access privacy-sensitive data without a usage description.  The app's Info.plist must contain an NSBluetoothAlwaysUsageDescription key with a string value explaining to the user how the app uses this data.

ObjectiveC Development


Swift Development


Macbook Pro 2018 to 2016 Development Prep

Adjustments to the Macbook Pro 2018 to 2016 - disabling the touch bar to aide debugging

Macbook 2018 Improvements

The 2018 i9-9990 has 32G of ram (since 2017) and up to a 4TB NVMe drive (I am using a 2TB).  The 8 core 9990 runs slower per core but because of the 16 thread count will run through my collatz benchmark in 18 sec instead of the previous 27 sec at the optimal 32thread forkjoin sweet spot.  For reference my older but still powerfull i7-5820K running 64G and overclocked to 4.3GHz will run at 11 sec overclocked and 17 sec at stock 3.3GHz (and this is for a 6 core 12 thread CPU).  So the effective performance of the 2018 macbook is on par with a 2014 era 6 core non-overclocked 3.3GHz XEON class CPU - which is good.

The CPU fan will run all the time if you use over 2 cores of the available 8.  The machine gets hot under normal development as expected and drops to throttled speed.

There is an improvement in the keyboard (it is still very inferior to the 2014 model) but it is a lot quieter than my 2016 model - and I have no stuck/repeated keys yet.

The touch bar remains effectively useless as you must disable it so as not to accidentally touch any of the soft keys - I enable only the FN keys for applications like Eclipse, IntelliJ, Xcode or VScode.

Macbook 2019 Issues

The 2019 macbook has the same issues as all the models back to 2016 - the keyboard quality, the touchbar and excessive heat throttling.

Macbook 2016 Improvements

The 2016 i7-6920HZ CPU runs 23% faster than the my late 2013 i7-4960 (12% of this is due to a clock speed jump from 2.6 to 2.9 GHz)
The GPU is faster - although this is hard to measure because I went from an NVidia 750GT to an ATI 460

Macbook 2016 Issues

The keyboard is lower quality than the 2015 model
The GPU is ATI instead of NVidia - which locks us out of must CUDA based libraries like TensorFlow leaving us with OpenCL
The touchbar causes multiple issues - the biggest one is launching siri or changing sound/screen inadvertently by accidentally touching the bar above the number row.

Minimize Macbook Pro 2016 Touchbar effects

The first thing you will notice when using the 2016 macbook will be how the touchbar causes issues north of the delete key when your fingers slide off the northbound part of the key.
The goal is to disable the touchbar for most apps leaving just the escape key.



For development apps that require function keys like the F3/F4 (navigation)and F5/F6/F7/F8 (debug) functions in Eclipse - enable just the function key view.

Here in eclipse we frequently need F3 to load a class and F4 to get the inheritance hierarchy


During a debug session we use F5 to enter, F6 to run, F7 to skip and F8 to resume


CPU and GPU performance


On average GPU speed for the 2016 macbook pro (top model) is 12x the cpu speed (all 4 cores)
Surprisingly the embedded GPU in the CPU runs slower than the embedded Iris GPU in my old 2013 macbook pro.

OpenCL


Connectors


I'll get into theUSB-C connectors shortly

Cases

Get the Thule case for your Macbook Pro 15 https://www.thule.com/en-us/ca/computer-phone-cases/laptop-cases/thule-gauntlet-30-macbook-pro-sleeve-15-_-tl_85854234856

Noise

The new keyboard is louder - try to type quieter in an office setting


Objective C

I really liked Objective C because of its Smalltalk and Object Oriented C roots from the late 80's and early 90s - I used Smalltalk V from 92 to 94 at Carleton.  Anyway my first iPhone app was written in Objective C starting in 2012

My first hello world in Objective C using iOS 5 at the time.

#import 
#include 

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        int64_t current = 0;
        int64_t maxValue = 0;
        int maxPath = 0;
        int path = 0;
        int64_t max; // 64 bit signed integer, like Java's long
        for (int64_t i=27; i<(1 << 30); i+=2) {
            current = i;
            path = 0;
            while (current > 1) {
                 if (current % 2 == 0) {
                    current = current >> 1;               
                } else {
                    current = 1 + current + (current << 1);
                }
                path++;
                if(max < current) {
                    max = current;
                }
            }
            bool maxSet = false;
            if(maxValue < max) {
                maxValue = max;
                maxSet = true;
            }
            if(maxPath < path) {
                maxPath = path;
                maxSet = true;
            }
            if(maxSet) {
                NSLog(@"%lld: %lld: %i",i, max, path);
            }
        }
    }
    return 0;
}


Links


https://eclipsejpa.blogspot.com/2012/01/ios-5-development.html

https://www.apple.com/covid19/contacttracing


  • No labels