Skip to main content

Posts

Showing posts from 2017

Electron - Build cross platform desktop apps with JavaScript, HTML, and CSS

If you can build a website, you can build a desktop app. Electron is a framework for creating native applications with web technologies like JavaScript, HTML, and CSS. It takes care of the hard parts so you can focus on the core of your application.

Web Technologies
Electron uses Chromium and Node.js so you can build your app with HTML, CSS, and JavaScript.

Open Source
Electron is an open source project maintained by GitHub and an active community of contributors.

Cross Platform
Compatible with Mac, Windows, and Linux, Electron apps build and run on three platforms.
The hard parts made easy

Automatic updatesNative menus & notificationsCrash reportingDebugging & profilingWindows installersElectron

Firebase Predictions API

Create custom predictions

In addition to the default predictions

will churnwill spendand will not spend
you can create custom predictions based on conversion events in your app.

Get started

Add Analytics and any custom events to your app.Enable Analytics data sharing in your app.Create and evaluate predictions.See the effects of different risk tolerance levels.Use a prediction with Remote Config.Use a prediction with the Notifications composer.
Google Firebase Predictions

Siri - still a long way to go...

Never mind Siri, thanks. ­čśĺ

Will Apple provide external GPU solutions by spring 2018?

There is a little hint that comes with the High Sierra documentation:

Virtual Reality f├╝r den Mac. Eine ganz neue Welt.
Mit macOS High Sierra k├Ânnen Entwickler zum ersten Mal interaktive Virtual Reality Erlebnisse auf dem Mac erstellen – mit dem neuen iMac mit Retina 5K Display, dem neuen iMac Pro, der Ende 2017 kommt, und jedem unterst├╝tzten Mac, der an eine externe GPU gekoppelt ist (Fu├čnote: Geplant f├╝r Fr├╝hjahr 2018).

I am curious :)

Apple High Sierra

Managing State with RxJava by Jake Wharton

Watch: This Brilliant Lego Calendar Syncs With Google

Last year, the designers at Vitamins, a design studio in London, took some time to build something for themselves. What they needed was a way to keep track of all their various projects. It had to be big and visual and easy to use in person but also accessible online. Their solution? A wall-sized calendar made entirely of Lego bricks that syncs with Google automatically via smartphone screenshots.

Wired

MockServer - Easy mocking of any system you integrate with via HTTP or HTTPS

MockServer can be used for mocking any system you integrate with via HTTP or HTTPS (i.e. services, web sites, apps, etc).

MockServer can:

return a "mock" response when a request matches an expectationforward a request when the request matches an expectation (i.e. a dynamic port forwarding proxy)execute a callback when a request matches an expectation, allowing the response to be created dynamicallyverify requests have been sent (i.e. as a test assertion)MockServer

LeakCanary - Memory leak detection library for Android

A memory leak detection library for Android and Java.

“A small leak will sink a great ship.” - Benjamin Franklin

LeakCanary will automatically show a notification when an activity memory leak is detected in your debug build.

GitHub / LeakCanary

Running Espresso Tests in parallel with Spoon and Android Test Sharding

Introduction to Android Espresso Testing and Spoon

Espresso UI test automation framework is Google’s de-facto testing platform for Android app developers.

No test engineer or developer will be quite unless it validates the functionality of his app on multiple devices and emulators. For that, there is another widely used tool called Spoon (there are also cloud-based solutions as mentioned above that support parallel execution on real devices). This tool, will collect all the target devices (that are visible via adb devices) test results and aggregate them into one HTML view that can be easily investigated.

Mobile Testing Blog


Android Test Sharding

The test runner supports splitting a single test suite into multiple shards, so you can easily run tests belonging to the same shard together as a group, under the same Instrumentation instance. Each shard is identified by an index number. When running tests, use the -e numShards option to specify the number of separate shards to create and the…

Firebase Remote Config

Firebase Remote Config is a cloud service that lets you change the behavior and appearance of your app without requiring users to download an app update. When using Remote Config, you create in-app default values that control the behavior and appearance of your app. Then, you can later use the Firebase console to override in-app default values for all app users or for segments of your user base. Your app controls when updates are applied, and it can frequently check for updates and apply them with a negligible impact on performance.

Firebase Remote Config

Firebase Performance Monitoring

Introducing Firebase Performance Monitoring

Monitoring performance from the end user's point of view - both app code performance and network responsiveness/reliability - is a challenge for building great mobile apps. You have to be able to understand conditions that need improvement, in order to avoid user churn and negative reviews. Conversely, we have seen that 60% of 5-star reviews on Google Play mention speed, design or usability.

This is why we built Firebase Performance Monitoring for iOS and Android. It provides an SDK to capture and instrument performance metrics in production, and a console to gain insights about the data captured by the SDK.

Firebase Google Blog
Firebase Performance Monitoring Docs

Kotlin for iOS and Kotlin/ktor as Web backend framework

Kotlin/Native Tech Preview: Kotlin without a VM
We are happy to announce the first Technology Preview of Kotlin/Native that compiles Kotlin directly to machine code. The Kotlin/Native compiler produces standalone executables that can run without any virtual machine.
Kotlin/Native uses the LLVM compiler infrastructure to generate machine code. In this preview, we support the following target platforms:
Mac OS X 10.10 and later (x86-64)x86-64 Ubuntu Linux (14.04, 16.04 and later), other Linux flavours may work as wellApple iOS (arm64), cross-compiled on MacOS X hostRaspberry Pi, cross-compiled on Linux host
Kotlin/Native


Ktor

Ktor is a framework for quickly creating web applications in Kotlin programming language with minimal effort.

This web site provides a complete reference to the Ktor application structure, programing interface and how to approach particular tasks.

Kotlin/Ktor

React Native and how to (partly) integrate it in your native app

React Native
React Native lets you build mobile apps using only JavaScript. It uses the same design as React, letting you compose a rich mobile UI from declarative components.


React Native uses the same fundamental UI building blocks as regular iOS and Android apps. You just put those building blocks together using JavaScript and React.With Hot Reloading, you can even run new code while retaining your application state.React Native combines smoothly with components written in Objective-C, Java, or Swift.React Native

Currently it's full monty or none: Either you use React Native completely for you app or you can't use it at all, e.g. for a single widget or screen. If you face the same situation take a look at:


Electrode Native: The Platform For Integrating React Native Into Your Apps

Electrode Native offers a streamlined integration of React Native into existing mobile applications. With Electrode Native, there will no longer be a need for an engineer who specializes in both mobi…

Caching POST requests with Varnish

Caching POST requests 

When a client (web browser) wants a regular resource (eg a HTML document or an image) from a web server, it will make a GET request to the server. In a default installation, Varnish will cache such requests, and this will lessen the load on the conventional web server.

When a user logs in to a site, or provides some unique or private information, this will be done through a POST request. By default, Varnish will not cache POST requests, but pass them directly to the backend server, unmodified. This is typically a good idea, but sometimes it makes sense to also cache POST requests.

When two different users use POST towards a web server, we only want them to receive the same reply if they supplied the same request body. The solution is to make the request body a part of the hash, and let the normal caching logic happen. The result is that only clients who supply the same body will receive the the same reply.

This tutorial describes the steps needed to cache POST r…

STF: Open-Source Fastest device testing Smartphone Test Farm for Android

No more trouble
Forget having to physically pick up a device ever again.
No more learning where the buttons are, or where the power cord goes.

Remote control
Any device in realtime, using your mouse and keyboard.
Or even your own smartphone.

Manage inventory
See which devices are connected, and who is using which device.
Search devices by any specification.

From your browser
No app installation is required
as a user.
Do realtime testing on more than one device, using just your browser.

Control Multiple Devices
As if they were plugged directly to your computer

OpenSTF.io
GitHub

Apple updated Ratings and Review Policy

You can ask users to rate and review your app at appropriate times throughout the user experience. Make the request when users are most likely to feel satisfaction with your app, such as when they've completed an action, level, or task.
Give users an easy way to provide feedback on the App Store without leaving your app using the SKStoreReviewController API. You can prompt for ratings up to three times in a 365-day period.

Apple App Store Ratings and Reviews

When you call SKStoreReviewController.requestReview() while your app is still in development mode, a rating/review request view is always displayed so that you can test the user interface and experience. However, this method has no effect when you call it in an app that you distribute using TestFlight.

Apple Developer Documentation

25 Android libraries you definitely want to try out in early 2017

This is a list of 25 best Android libraries released in January and February 2017. All of these are worth trying out — they are not in ranked order. Let’s get started!


Lottie - AnimationsStore - Async Data Loading and CachingCheck out our Carlos, too!Chuck - HTTP debugger for OkHttpCoordinatorTabLayoutShimmerRecyclerView - Cell loading indicator like FBfreeCodeCamp

Animations with Lotti for SVG-like Animations created by After Effects for iOS, Android and React Native by AirBnB

Lottie AirBnB: Behind the scenes of our new open-source animation tool.
Lottie is an iOS, Android, and React Native library that renders After Effects animations in real time, and allows native apps to use animations as easily as they use static assets. Lottie uses animation data exported as JSON files from an open-source After Effects extension called Bodymovin. The extension is bundled with a JavaScript player that can render the animations on the web.

Lottie also has several features built into its API to make it more versatile and efficient. It supports loading JSON files over the network, which is useful for A/B testing. It also has an optional caching mechanism, so frequently used animations, such as a wish-list heart, can load a cached copy each time. Lottie animations can be driven by gestures using the animated progress feature, and animation speed can be manipulated by changing a simple value. iOS even supports adding additional native UI to an animation at runtime, which ca…

Texture: Keeps the most complex iOS user interfaces smooth and responsive.

Texture

Texture is an iOS framework built on top of UIKit that keeps even the most complex user interfaces smooth and responsive. It was originally built to make Facebook's Paper possible, and goes hand-in-hand with pop's physics-based animations — but it's just as powerful with UIKit Dynamics and conventional app designs. More recently, it was used to power Pinterest's app rewrite.


As the framework has grown, many features have been added that can save developers tons of time by eliminating common boilerplate style structures common in modern iOS apps. If you've ever dealt with cell reuse bugs, tried to performantly preload data for a page or scroll style interface or even just tried to keep your app from dropping too many frames you can benefit from integrating Texture.

Pinterest: Texture



pop: An extensible iOS and OS X animation library, useful for physics-based interactions.

Pop is an extensible animation engine for iOS, tvOS, and OS X. In addition to basic stat…

Backend-driven native UIs

Backend-drive native UIs

John Sundell Slide Share


Using Back-End Design to Create Customizable Front-End Mobile Experiences
By controlling the front end of mobile apps from the back end we can build customized experiences at runtime, creating cleaner interfaces and reducing load times.

Nithin Rao UX Magazine


The Hub Framework
Welcome to the Hub Framework - a toolkit for building native, component-driven UIs on iOS (no Android support released yet). It is designed to enable teams of any size to quickly build, tweak and ship new UI features, in either new or existing apps. It also makes it easy to build backend-driven UIs.

The Hub Framework has two core concepts - Components & Content Operations.

Spotify


LeeGo: Build UI without UIView
LeeGo is a lightweight Swift framework that helps you decouple & modularise your UI component into small pieces of LEGO style's bricks, to make UI development declarative, configurable and highly reusable.

Wang Sheng Jia: GitHub



ComponentKit: A Reac…

Firebase Cloud Functions

Cloud Functions for Firebase (similar to AWS Lambda) lets you automatically run backend code in response to events triggered by Firebase features and HTTPS requests. Your code is stored in Google's cloud and runs in a managed environment. There's no need to manage and scale your own servers.

Realtime Database TriggersFirebase Authentication TriggersGoogle Analytics for Firebase TriggersCloud Storage TriggersCloud Pub/Sub TriggersHTTP TriggersFirebase Google

ARKit and ARCore

ARKit from Apple iOS

Visual Inertial OdometryARKit uses Visual Inertial Odometry (VIO) to accurately track the world around it.Scene Understanding and Lighting EstimationARKit can detect horizontal planes like tables and floors, and can track and place objects on smaller feature points as well.High Performance Hardware and Rendering OptimizationsYou can take advantage of the optimizations for ARKit in Metal, SceneKit, and third-party tools like Unity and Unreal Engine. Supported formats include the following:


Format Filename Extension Supported in Digital Asset Exchange .dae macOS 10.8 and later Alembic .abc macOS 10.10 and later SceneKit compressed scene .dae or .abc macOS 10.10 and later iOS 8.0 and later SceneKit archive .scn macOS 10.10 and later iOS 8.0 and later
Developer Apple
WWDC 2017 - ARKit Demo


ARCore from Google Android
ARCore works with Java/OpenGL, Unity and Unreal and focuses on three things:

Motion trackingUsing the phone’s camera to observe feature points in the room and IMU…

UI Tests with Xcode 8

Generic approach to iOS UI Tests in SwiftPage object conceptWWDC 2017 What's New in TestingXcode Automated UI Tests & NSUserDefaultsThe solution I found was to write to the launchArguments property of my XCUIApplication instance in my test class, and then read that parameter in my AppDelegate class.XcodeUITestingExperimentsNetworkStubbingExperimentFileSystemManipulationSystemLogQueryLightweight IPC with the Darwin notification centerSelf-contained UI tests for iOS applications Disabling animations Page objectsAssert helpersNetwork data stubbing with Wire MockUsing data from mocks in testsInstrumentation Testing RobotsLibraries like Espresso allow UI tests to have stable interactions with your app, but without discipline these tests can become hard to manage and require frequent updating. In this talk Jake will cover how the so-called robot pattern allows you to create stable, readable, and maintainable tests with the aid of Kotlin’s language features.

Detect if your Native app is installed from your web site

As the capabilities of the Web become more aligned with what was once the domain of native experiences there are an increasing number of times where a developer will want to reduce the confusion for their users who have both the web and native apps installed.

In Chrome 59 we are introducing a new API called getInstalledRelatedApps(). This new API lets you determine if your native app is installed on a device.

Paul Kinlan @ Medium.com

Apple iTunes Auto-Renewables: Increase price of existing auto-renewable subscriptions while keeping existing subscribers at their current price

If you increase pricing, you can either maintain the current price for existing subscribers or apply the price change for all users. As you go through the workflow outlined in Making Price Changes to Auto-Renewable Subscriptions, you can choose whether to apply the price increase to all subscribers.

As of iOS 10.0, if you decide to increase prices for existing subscribers, Apple will notify the subscribers of the price increase, along with the date they will be charged the new price. They’ll need to agree to the new price before they're charged. If they don't agree, their subscription won't automatically renew.

Note that price preservation is only available when you increase pricing; not when you decrease pricing. Price decreases will be immediately applied to all subscribers paying a price higher than the one you set.

Apple Developer Documentation

Speed up your unit tests! Swap out your App Delegate for testing.

Faster, please
One thing that can slow our tests down is if our App performs expensive tasks on startup and it is not unusual to place code that synchronizes with a server in our implementation of UIAppDelegate.

Luckily for us there is a way to change the production App Delegate with a fake that does nothing.

Objective-C
class FakeAppDelegate: UIResponder, UIApplicationDelegate {
  var window: UIWindow?

  func application(application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
    self.window?.rootViewController = UIViewController()
    return true
  }
}

let isRunningTests = NSClassFromString("XCTestCase") != nil

if isRunningTests {
  UIApplicationMain(Process.argc, Process.unsafeArgv, nil,
    NSStringFromClass(FakeAppDelegate))
} else {
  UIApplicationMain(Process.argc, Process.unsafeArgv, nil,
    NSStringFromClass(AppDelegate))
}

Swift
class FakeAppDelegate: UIResponder, UIApplicationDelegate {
  var window: UIWindow?

  func applicat…

10 new iOS libraries

Hydra
Hydra is full-featured lightweight library which allows you to write better async code in Swift 3+.

Lottie
Lottie is a mobile library for Android and iOS that parses Adobe After Effects animations exported as json with bodymovinand renders the vector animations natively on mobile and through React Native!

Hero
Hero is a library for building iOS view controller transitions. It provides a layer on top of the UIKit’s cumbersome transition APIs. Making custom transitions an easy task for developers.

Charts
Beautiful charts for iOS/tvOS/OSX! The Apple side of the crossplatform MPAndroidChart.

JTAppleCalendar
The Unofficial Swift Apple Calendar Library. View. Control. for iOS & tvOS

and more...

Seyhun AKY├ťREK at Medium

Unidirectional Data Flow Architecture (Redux) in Swift

In this post, I try to explain why using Redux with Swift is better idea [than MVVM].

What is Redux and Unidirectional Data Flow?

Redux is a flux implementation but slightly better implementation, it makes your application’s state more predictable. It first came out in Javascript world as a predictable state container for JavaScript apps with the powerful javascript library React.

Redux, simply makes your application’s state in single store object. So firing an action from your application/in view’s lifecycle state changes and your reducers for that action generate a new state.


Seyhun Aky├╝rek at Medium

Extract sub-libraries from a given iOS/Swift library without access to source code to avoid namespace clashes using lipo and ar command

We at WeltN24 were facing the problem that two libraries that we integrated in our iOS project, used the same sub-library which resulted in naming conflicts due to the non-existing namespaces in Swift.

If you know what you are doing you can try to solve this conflict by extracting the shared sub-library from one of the libraries you want to integrate. You can even do this if you don't have access to the source code using the lipo (create or operate on universal files) and ar (create and maintain library archives) commands.

Why you should know what you are doing?
Manipulating unknown archives can result in unforseen effects because of the fact that you don't know anything about how the provider of the archive uses the sub-library, which version of the library was used or if the source code of the library was manipulated. So...
You should know what you are doing manipulting archives :)

The script is processing the files in following order:

Extracting architecture slices of multi-…

10 Kotlin Tricks in 10 ish minutes by Jake Wharton Devoxx

Why Core ML will not work for your app (most likely)

While the buzz around newly released Apple framework is loud, I want to explain several things, that may not be obvious for those who are new to machine learning (ML).


Core ML is not a machine learning framework.Core ML supports only two types of ML.If your models are proprietary or contain sensitive information, you can’t use CoreML.Core ML doesn’t solve the privacy concerns.Core ML doesn’t compress models.Core ML is not the only way to do machine learning on iOS.

Learn Machine Learning, not Core ML.

Impervious Invisibility

iOS Architecture Patterns - Demystifying MVC, MVP, MVVM and VIPER

Feeling weird while doing MVC in iOS? Have doubts about switching to MVVM? Heard about VIPER, but not sure if it worth it?

You are about to structure your knowledge about architectural patterns in iOS environment. We’ll briefly review some popular ones and compare them in theory and practice going over a few tiny examples. Follow links if you need more details about any particular one.
Mastering design patterns might be addictive, so beware: you might end up asking yourself more questions now than before reading this article, like these:

Who supposed to own networking request: a Model or a Controller?How do I pass a Model into a View Model of a new View?Who creates a new VIPER module: Router or Presenter? Bohdan Orlov medium.com

WWDC 2017: App Rating Changes

Apple is putting an end to the scourge of review prompts that seemed to pop up inside of some apps every few days. In a change to the App Store rules this week, Apple said it will now enforce hard limits on how review prompts show up and how often users have to see them.

First, apps will be required to use a new Apple-made review prompt, which allows users to leave a rating without exiting an app.

An app can only display the prompt three times a year, regardless of how often it’s been updated.

Part of the reason developers have their apps show review prompts so often is because Apple has always reset an app’s rating after every update, even very minor ones. With the redesigned App Store, developers will have the option to change that, so that their app’s ratings are maintained between updates.

And if you release a major new version that drastically changes the core features of your app, you can press the big button to reset the App Store ratings.

The Verge

Planet of the Apps

The season premiere is finally here! Watch this new series about apps and their creators. Featuring Jessica Alba, Gwyneth Paltrow, Gary Vaynerchuk, and will.i.am.

The first episode is available here for a limited time. Join Apple Music to get new episodes weekly.
Planet of the Apps (Apple Music)

The fastest Diff and patch library in Swift to apply data changes in UICollectionView or UITableView

This library generates differences between any two Collections (and Strings). It uses a fast algorithm (O((N+M)*D)).

Features

Diff.swift supports three types of operations:

InsertionsDeletionsMoves (use ExtendedDiff)Arbitrary sorting of the PatchUtilities for UITableView and UICollectionView (if that's just what you want, skip to examples)⚡️ fastDiffing collections containing collections (use NestedDiff)
GitHub / Wokalski / Diff

Code Security Guidelines for Java/Android and iOS

Secure Coding Practices - Quick Reference Guide

The OWASP Java™ and JVM Technology Knowledge Base is the clearing house for all information related to building secure web/distributed applications and services based on Java and JVM technologies. The focus of these pages is on guidance for developers and architects using Java frameworks and JVM based technologies for web application development, on OWASP components that use Java and on participation in OWASP projects that use Java and JVM technologies. Moreover, we aim to provide security related guidance for system administrators managing Java and JVM based applications and tools.

The project is not limited to Java. It aims to also address topics around the JVM in general.

Community content is key to security information. The project depends on content from developers throughout the Java and JVM ecosystem.

OWASP Java Homepage
OWASP Java Guidelines (PDF)


IOS Application Security Testing Cheat Sheet

This cheat sheet provides a checklist of…

URLNavigator

URLNavigator provides an elegant way to navigate through view controllers by URLs. URL patterns can be mapped by using URLNavigator.map(_:_:) function.

URLNavigator can be used for mapping URL patterns with 2 kind of types: URLNavigable and URLOpenHandler. URLNavigable is a type which defines an custom initializer and URLOpenHandler is a closure which can be executed. Both an initializer and a closure receive an URL and placeholder values.

Navigator.map("myapp://user/", UserViewController.self)
Navigator.map("myapp://post/", PostViewController.self)</b></font></p> <p> <font face="Courier New, Courier, monospace"><b><br></b></font></p> <p> <font face="Courier New, Courier, monospace"><b>Navigator.map("myapp://alert") { url, values in</b></font></p> <p> <font face="Courier New, Courier, monospace"><b>  print(url.query…

eureka - Elegant iOS form builder in Swift

Save Time Coding
By adding Eureka, you will be able to create powerful forms without all the repetitive and complex code required. You can also create dynamic forms out of the box!
Reuse Your Code Write your code once and use it everywhere. Forget about duplicated style and validation code and enjoy Eureka's abstractions to power up you app!
Community Eureka is actively maintained and supported by Xmartlabs engineering team and a thriving community of users and contributors - it is currently used in +15k apps in the App Store!
Best In Class Comprehensive documentation, tens of custom rows and lighting fast support of new Swift/iOS versions made Eureka the preferred tool of 10 of the top 200 apps in the App Store.

GitHub

App Performance Monitoring

AppDynamics
Real-time performance monitoring—from code-level to customer experience

Application Performance Monitoring
Remove complexity and solve problems more quickly with proactive, end-to-end performance monitoring.

End-User Monitoring
Create better experiences where your customers are engaging with your business the most.

Business Performance Monitoring
See the real-time impact application performance and customer experience are having on your bottom line.

AppDynamics

bonkey: "I still call it CRASHDynamics"
...maybe they improved since then?


New Relic
Performance monitoring for today’s digital business

Full Stack Visibility
Monitor and optimize your entire technology stack—from your infrastructure and applications to browser and mobile apps.

Built to Scale
The only pure-play 100% multi-tenant cloud platform that's easy to deploy. And with no hardware to manage, you can see higher ROI and significantly lower TCO.

Real-time Analytics for Everyone
Beautiful dashboards that del…

What’s New in TestFlight

April 11, 2017

TestFlight in iTunes Connect now provides multiple build support, enhanced group capabilities, and improved tester management—making it even easier to test your apps.

Multiple Builds
TestFlight now lets you distribute and test multiple builds at the same time, so testers can choose from a number of builds to test.

Groups
TestFlight groups have changed. You can now do more with them, like create groups of TestFlight users, and each group can test a different build. To get you started, we’ve added all of your existing external testers to the group “External Testers,” which you can edit at any time.

Tester Management
Testers can continue testing a build when it goes live on the App Store, minimizing disruptions. iTunes Connect users can also access all active builds, letting them seamlessly compare different builds and you can easily resend invitations to testers who have not yet accepted their invitation.

Apple

Software Sucks Because QA and Testing are Underpaid and Misunderstood

Everybody who hires in the software industry complains about how hard it is to find good QA people. It’s no wonder, considering how little we respect them and how little we pay them.

Testers are power users on the inside of your team, but nobody listens to them because nobody respects them.

Make the QA lead the equal of the Design and Dev Leads in your hierarchy. Give the QA Lead line management over the QA team. It is weirdly commonplace for the QA team, including the QA Lead, to be line managed by the Dev Lead.

Tracy Rolling


Track uninstalls on iOS

iTunes Connect does not have any metric for presenting number of uninstalls. Developers do not have any callback for uninstall and hence can not call any API, that could have been used as a counter or something.

There are number of attribution tools in the market that can help you with tracking uninstalls.

Uninstall Event Tracking Solution involves working with Push Notifications and creating a daily ping service.

Medium.com

Firebase App Indexing from Google for Android and iOS

Firebase App Indexing gets your app into Google Search. If users have your app installed, they can launch your app and go directly to the content they're searching for. App Indexing reengages your app users by helping them find both public and personal content right on their device, even offering query autocompletions to help them more quickly find what they need. If users don’t yet have your app, relevant queries trigger an install card for your app in Search results.

App Indexing lets Google index your app just as if it were a website. For users with your app installed, deep links to your app - on Android or iOS - appear in Google Search results, allowing users to find exactly the right content within your app.

In addition to driving re-engagement, App Indexing on Android will also surface install buttons for users who do not yet have your app installed. Since 1 in 4 appsare already being discovered through search, App Indexing is a simple and free
method for acquiring new users…

Headless WebKit now means Headless Chromium instead of headless PhantomJS

Announcement

Bad news for beloved PhantomJS:

Headless mode allows running Chromium in a headless/server environment. Expected use cases include loading web pages, extracting metadata (e.g., the DOM) and generating bitmaps from page contents -- using all the modern web platform features provided by Chromium and Blink.

To use headless, start Chrome with a command line flag:

 $ chrome --headless --remote-debugging-port=9222 https://chromium.org

Chrome Platform Status

Usage from Node.js

For example, the chrome-remote-interface Node.js package can be used to extract a page's DOM like this:

const CDP = require('chrome-remote-interface');

CDP((client) => {
  // Extract used DevTools domains.
  const {Page, Runtime} = client;

  // Enable events on domains we are interested in.
  Promise.all([
    Page.enable()
  ]).then(() => {
    return Page.navigate({url: 'https://example.com'});
  });

  // Evaluate outerHTML after page has loaded.
  Page.loadEventFired(() => {
    Runtime.eva…

3D everywhere: on smartphones, virtual reality wear, in the browser - where is the content?

The virtual reality goggles are everywhere:

Oculus RiftHTC ViveMicrosoft HololenseGoogle Cardboard (I love low-tech approaches!) But where is the 3D content? Here you go! Google Cardboard App (Android and iOS)Record 360 VR images - great for real estate!You can play back the images either on the phone with the appOr in the web: VR View with the webGoogle DaydreamMicrosoft 3D scan via smartphone3D-Scanner f├╝r die Hosentasche: Microsoft-App scannt jedes ObjektHow Microsoft Is Pushing the 3D Revolution With Windows 10Apple Exploring New 3D Dual-Lens Camera Hardware for iPhone 8Apple AR glasses rumours And how to close the digital gap and drag an 3D object into real life? Shapeways - Personalized, 3D Printed Products

Implementing UI tests on iOS and Android using screenshot comparison tools

Have you ever thought when writing or maintaining UI tests, there must be a better way?

Take a look at screenshot tests provided by Google Firebase and Facebook:

ios-snapshot-test-case
A "snapshot test case" takes a configured UIView or CALayer and uses the renderInContext: method to get an image snapshot of its contents. It compares this snapshot to a "reference image" stored in your source code repository and fails the test if the two images don't match.

GitHub Facebook

screenshot-tests-for-android
Testing rendering for your Android app is hard. How do you prevent visual regressions in paddings and margins and colors from creeping in?
Iterating on UI code is hard. How do you quickly verify that your layout or view changes work correctly in all configurations?

screenshot-tests-for-android can solve these problems by providing a test framework that checks for visual differences across changes.

GitHub Facebook

Google Firebase Test Lab
Test Lab lets you run Espresso, …

React Native: A year in review

It's been one year since we open-sourced React Native. What started as an idea with a handful of engineers is now a framework being used by product teams across Facebook and beyond. Today at F8 we announced that Microsoft is bringing React Native to the Windows ecosystem, giving developers the potential to build React Native on Windows PC, Phone, and Xbox. It will also provide open source tools and services such as a React Native extension for Visual Studio Code and CodePush to help developers create React Native apps on the Windows platform. In addition, Samsung is building React Native for its hybrid platform, which will empower developers to build apps for millions of SmartTVs and mobile and wearable devices. We also released the Facebook SDK for React Native, which makes it easier for developers to incorporate Facebook social features like Login, Sharing, App Analytics, and Graph APIs into their apps. In one year, React Native has changed the way developers build on every majo…

HockeyApp goes Azure to provide fabric.io and Cloud CI functionality

HockeyApp presents beta of Mobile Center.

Mobile Center is the next generation of HockeyApp. We are very excited about the much more comprehensive solution Mobile Center provides. The changes we are making to Teams helps to modernize HockeyApp into a similar pattern being used in Mobile Center and will allow us to provide a much smoother side by side experience between HockeyApp and Mobile Center. You can log in to Mobile Center today using your existing HockeyApp account and password to give it a try.

Mobile Center brings together multiple services, commonly used by mobile developers, into a single, integrated product. You can build, test, distribute, and monitor your mobile apps and easily add backend cloud services to scale your app to millions of users on demand.

Mobile Center seems to provide a mixture of fabric.io crashlytics and statistics plus a Cloud CI solution like Travis CI.

YouTube
HockeyApp

Ministry of Testing: The Mobile Test Pyramid

The flipped testing pyramid has no stable foundation and mobile testing requires lots of manual testing, which is why I created my own mobile test pyramid consisting of four layers including manual and automated steps. The biggest layer of the pyramid is manual testing and forms the strong foundation for every mobile app project, followed by end-to-end testing, beta testing and a top layer comprising unit testing. The grey parts of the pyramid indicate the automated steps and the white parts are the manual testing steps. The beta-testing layer is new to the pyramid but essential to every mobile app project.

Ministry of Testing

Hands-On Mobile App Testing: A Guide for Mobile Testers and Anyone Involved in the Mobile App Business

Kotlin 1.1 Released with JavaScript Support, Coroutines and more

JavaScript Support

Transpile to JavaScriptUse node.js, CommonJS and AMDImport TypeScriptUse other libsCoroutines
Technically, coroutines are light-weight means of cooperative multi-tasking (very similar to fibers). In other words, they are just much better threads: almost free to start and keep around, extremely cheap to suspend (suspension is for coroutines what blocking is for threads), very easy to compose and customize.
We designed coroutines for maximum flexibility: very little is fixed in the language, and very much can be done as a library. The kotlinx.coroutines project features libraries on top of Rx, CompletableFuture, NIO, JavaFx and Swing. Similar libraries can be written for Android and JavaScript. Even many built-in constructs available in other languages can now be expressed as Kotlin libraries. This includes generators/yield from Python, channels/select from Go and async/await from C#
JetBrains

Smartphone Market Q4/2016: Apple back to #1

Apple hat sich nach zwei Jahren mal wieder an die Spitze des Smartphone-Markts geschoben und liegt nun knapp vor Samsung – dank eines starken Weihnachtsquartals und des Note-7-Debakels.

Hersteller4. Quartal 20164. Quartal 2015Absatz +/-Ger├ĄteabsatzMarktanteilGer├ĄteabsatzMarktanteilApple77,0 Mio.17,9 %71,5 Mio.17,7 %+7,7 %Samsung76,8 Mio.17,8 %83,4 Mio.20,7 %-8,0 %
Heise

Top 10 iOS Conferences in 2017

Attending an iOS conference is a great way to learn new things and make new friends.
Also – as Ray said in one of his recent talks – good conferences give you a spark of motivation that burns even brighter even after you return home. Did you ever notice that upbeat attitude the days right after a conference?
There’s plenty of great iOS conferences out there, so choosing which one to attend can be difficult. This post will help you find the best matches for you in 2017.
Picking the top 10 is a hard task. This is why I reached out to the raywenderlich.com team and the entire iOS community to ask for their feedback in developing this list.

Ray Wenderlich

Automate Testing & Build Delivery with fastlane and Travis CI

Conclusions and Future Considerations

We demonstrated how to set up continuous integration and delivery in a real-world setting. We made our code reviews safer by making Travis CI run our test suite automatically on each pull request. And finally, we automated pushing builds to testers and clients, thus saving developers from having to do it manually.

Macosope

UIApplication.setAlternateIconName - Dynamically change the app's icon

Use this method to change your app's icon to its primary icon or to one of its alternate icons. You can change the icon only if the value of the supportsAlternateIcons property is true.

You must declare your app's primary and alternate icons using the CFBundleIcons key of your app's Info.plist file. For information about how to configure alternate icons for your app, see the description of the CFBundleIcons key in Information Property List Key Reference.

Apple Developer

WKWebView open with Cookie set

WKWebView * webView = /*set up your webView*/
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://example.com/index.html"]];
[request addValue:@"TeskCookieKey1=TeskCookieValue1;TeskCookieKey2=TeskCookieValue2;" forHTTPHeaderField:@"Cookie"];
// use stringWithFormat: in the above line to inject your values programmatically
[webView loadRequest:request];

StackOverflow

Saving you bandwidth when loading images through machine learning

To help everyone be able to see the beautiful photos that photographers share to Google+ in their full glory, we’ve turned to machine learning and a new technology called RAISR. RAISR, which was introduced in November, uses machine learning to produce great quality versions of low-resolution images, allowing you to see beautiful photos as the photographers intended them to be seen. By using RAISR to display some of the large images on Google+, we’ve been able to use up to 75 percent less bandwidth per image we’ve applied it to.

Google

Instance Methods are Curried Functions in Swift

An instance method in Swift is just a type method that takes the instance as an argument and returns a function which will then be applied to the instance.

class BankAccount {
    var balance: Double = 0.0

    func deposit(amount: Double) {
        balance += amount
    }
}

We can obviously create an instance of this class and call the deposit() method on that instance:

let account = BankAccount()
account.deposit(100) // balance is now 100

So far, so simple. But we can also do this:

let depositor = BankAccount.deposit
depositor(account)(100) // balance is now 200

Ole Begemann

Fabric and Crashlytics is joining Google

Today we (Twitter) enter the next chapter for Fabric and are pleased to announce that we've signed an agreement for Fabric to be acquired by Google and for our team to join Google's Developer Products Group, working with the Firebase team.

Fabric customers: there's no action you need to take in order to keep using these products. When the acquisition is complete, Google will begin providing Fabric, Crashlytics, Answers, and associated beta products.

Twitter