<?xml version="1.0" encoding="utf-8"?>
<!-- generator="Kirby" -->
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">

  <channel>
    <title>Mot-cl&#233;: apple &#183; Blog &#183; Liip</title>
    <link>https://www.liip.ch/fr/blog/tags/apple</link>
    <generator>Kirby</generator>
    <lastBuildDate>Wed, 26 Jul 2017 00:00:00 +0200</lastBuildDate>
    <atom:link href="https://www.liip.ch" rel="self" type="application/rss+xml" />

        <description>Articles du blog Liip avec le mot-cl&#233; &#8220;apple&#8221;</description>
    
        <language>fr</language>
    
        <item>
      <title>Compare and convert HEIF, JPEG and WebP images with rokka</title>
      <link>https://www.liip.ch/fr/blog/compare-convert-heif-jpeg-webp</link>
      <guid>https://www.liip.ch/fr/blog/compare-convert-heif-jpeg-webp</guid>
      <pubDate>Wed, 26 Jul 2017 00:00:00 +0200</pubDate>
      <description><![CDATA[<h3>TL;DR</h3>
<p>Go to <a href="https://compare.rokka.io/_compare/">compare.rokka.io/_compare</a> and compare the output of the HEIF, JPEG and WebP formats. Even upload your own pictures. All done with <a href="https://rokka.io/">rokka</a>.</p>
<h3>Long version</h3>
<p>Apple produced quite some hype with their support for the <a href="https://nokiatech.github.io/heif/">HEIF image format</a> in the upcoming <a href="https://www.apple.com/ios/ios-11-preview/">iOS 11</a> and <a href="https://www.apple.com/macos/high-sierra-preview/">macOS High Sierra</a>. HEIF (High Efficiency Image File Format) is a new image file format, which supports many use cases and uses <a href="https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding">HEVC</a> for the compression part, also known as H.265. Apple is using HEIF on their latest devices as a replacement for storing pictures and claims up to 50% saves on storage.</p>
<p>Even though no browser does support HEIF yet, also not Safari in the current betas, we nevertheless thought it would be cool to add HEIF support to <a href="https://rokka.io/">rokka</a> – our image storage and delivery service. And so we did.</p>
<p>Unfortunately there's no out-of-the-box solution to create HEIF files currently. But <a href="https://twitter.com/bengotow">Ben Gotow</a>‘s site <a href="http://jpgtoheif.com/">jpgtoheif.com</a> inspired us. He published instructions how to create HEIF files with the help of <a href="https://www.ffmpeg.org/">ffmpeg</a>, <a href="http://x265.org/">x265</a> and <a href="https://github.com/nokiatech/heif">Nokia's heif writerapp</a>. But due to the uncommercial-only license of that Nokia code, we use <a href="https://gpac.wp.imt.fr/2017/06/09/gpac-support-for-heif/">GPAC</a> to create the HEIF container, which is published under the LGPL license.</p>
<h3>Looking at and comparing HEIF compressed images</h3>
<p>What's the fun, when almost no one can look at the result? So we built a little site, where you can compare the output of rokka's HEIF, JPEG and WebP  (the later is only supported on Chrome) and even upload your own pictures. Just head to</p>
<p><a href="https://compare.rokka.io/_compare/">compare.rokka.io/_compare</a></p>
<p>and enjoy it. The uploaded images will be deleted from time to time.</p>
<p>The site uses Nokia's <a href="https://github.com/nokiatech/heif/wiki/IV.-HEIF-Reader-JavaScript-Implementation">HEIF Reader JavaScript Implementation</a>, which decodes a HEIF image in JavaScript to a canvas element. This way, everyone can look at HEIF images and compare them to JPEG and WebP output.</p>
<p>The site also allows you to play with different quality settings. All formats support a setting from 1 to 100. 1 is the lowest and 100 the highest (also means lossless for WebP). The different quality settings for the different formats don't really correspondent to each other. Just play around with them and compare the sizes of the images with different settings.</p>
<p>We use pretty much the default settings of ffmpeg, maybe some stuff could be improved on that side. And we also don't know what kind of encoder Apple is using for generating HEIF images. So don't really compare the compression we produce for HEIF images with what maybe other encoders can do.</p>
<p>Also be aware, that we asynchronously compress JPEG images in the background with mozjpeg (see the <a href="https://rokka.io/documentation/references/stacks.html#additional-image-size-optimizations">rokka docs</a> for details), so the first render output is not the maximized compression we can get for JPEG images. Just hit the render button 10 seconds later to get the final compression (the site will inform you, when it's not done yet with that compression step).</p>]]></description>
                  <enclosure url="http://liip.rokka.io/www_card_2/924cf1902d24b87882bddd14683317ad15c2e695/train.jpg" length="2286639" type="image/jpeg" />
          </item>
        <item>
      <title>Native or Hybrid Mobile Application, Which One Should I Choose?</title>
      <link>https://www.liip.ch/fr/blog/native-or-hybrid-mobile-application-which-one-should-i-choose</link>
      <guid>https://www.liip.ch/fr/blog/native-or-hybrid-mobile-application-which-one-should-i-choose</guid>
      <pubDate>Mon, 19 Jun 2017 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>It is complex for non-geeks to understand the mobile application ecosystem. We often hear jargon such as mobile apps, hybrid apps, native apps, single-codebase-cross-platforms apps, etc.</p>
<p>Some clarification is needed.</p>
<h3><strong>The Difference Between Native and Hybrid Apps</strong></h3>
<p>In this article, we talk only about apps that one can download from an app store (and not about <a href="https://blog.liip.ch/archive/2017/05/02/do-i-need-a-mobile-application-or-a-mobile-website.html">mobile websites</a>).</p>
<p><em>Native</em> apps are mobile applications that are written in a native language such as Swift for all Apple iOS apps, and Java for all Google Android apps. You have to write the code <em> two times</em>, once for each platform, which results in more development and maintenance work.</p>
<p><em>Hybrid</em> apps are based on a <em>single codebase</em> that produces mobile apps for both Apple and Google platforms.</p>
<p>Both native and hybrid applications are on app stores. Both are downloaded on your iPhone or Android smartphones. Both can be opened. Both can send push notifications. Both can be deleted from your smartphone. No matter what's inside.</p>
<h3><strong>Native or Hybrid App, Which One Should I Build?</strong></h3>
<p>“All this is very interesting, but what should I use for my next mobile product?”, you may wonder.</p>
<p>At Liip we use the following <em>criteria</em> to guide our strategy:</p>
<p><strong>Internal Business Logic</strong> If the app contains more than 50% business logic stored on the smartphone directly (vs. business logic stored at a backend server), then it's worth investing into a hybrid solution as the mutualization of code will have a significant financial impact on the project. An example we worked on is the <a href="https://www.liip.ch/en/what/projects/schindler-spare-parts-catalogue-app">Schindler elevators mobile app</a> with its offline requirements that required to store the logic on the smartphone app.</p>
<p>In the other case, we favor native mobile apps.</p>
<p><strong>Custom Design</strong> When the app has a lot of custom visual components (e.g. not the default list views proposed by Apple or Google), then we recommend to craft a <em>native</em> app as the hybrid approach wouldn't bring any mutualized value here because you anyway have to build custom User Interface for each platform.</p>
<figure><img src="https://liip.rokka.io/www_inarticle/d0263ec55a47d67c1ca02f1878913be59d8961fe/native-or-hybrid-custom-design-example-1-1024x854.jpg" alt="On the left is a list using standard Apple iOS visual components, and on the right the example of the UEFA Champions League mobile app with a custom list view."></figure>
<p>On the left is a list using standard Apple iOS visual components, and on the right the example of the UEFA Champions League mobile app with a custom list view.</p>
<p><strong>Reliance on Third Party Plugins</strong> If your project relies on one or more third party plugins (aka SDKs), like for instance Tealium (a data management tool including Analytics monitoring), then we recommend to build a <em>native</em> app. These plugins are written in Swift and Java so you never have compatibility issues with native apps.</p>
<p>This criteria comes from an experience we had where we spent a lot of time integrating a third party plugin within a Xamarin hybrid app project.</p>
<h3><strong>It is a Weighting Game</strong></h3>
<p>As we often claim, <em>we are not religious with technologies</em> here at Liip. There is no magic formula that can be applied to all projects; we always have to ponder each criteria together with the client in order to find the best fit for his situation.</p>
<p>Do <em>you</em> have experience with one or the other kind of mobile application? Bad or good, <em>share your story</em> with us.</p>]]></description>
                  <enclosure url="http://liip.rokka.io/www_card_2/aee2c6658f1dffba2ed8fcae5e21d42bddf6ef73/native-or-hybrid-mobile-application.jpg" length="510295" type="image/jpeg" />
          </item>
        <item>
      <title>5 lessons learnt about the new SAP Cloud Platform SDK for iOS</title>
      <link>https://www.liip.ch/fr/blog/5-lessons-learnt-about-the-new-sap-cloud-platform-sdk-for-ios</link>
      <guid>https://www.liip.ch/fr/blog/5-lessons-learnt-about-the-new-sap-cloud-platform-sdk-for-ios</guid>
      <pubDate>Thu, 01 Jun 2017 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>The SAP Cloud Platform SDK for iOS was <a href="https://blogs.sap.com/2017/03/30/sap-cloud-platform-sdk-for-ios-released/">released in March</a> and we were very excited to try it out. This toolkit allows companies to let developers build, extend, and run iOS apps based on SAP back-end data. Thus, business' employees can access live data at any time from their iOS mobile app, and enjoy the standard SAP Fiori design language they are used to.</p>
<p>We booked a one-day hands-on with <a href="https://twitter.com/noefroidevaux">Noé</a> in our <a href="http://thinkspace.ch/">ThinkSpace</a> war room with the objective to have a demo app up and running and plugged to the SAP Cloud Platform (formerly known as SAP Hana). This may sound like an easy goal but honestly, knowing SAP, we thought that it was already ambitious.</p>
<h3><strong>Lesson learnt #1: One can easily create a SAP Cloud Platform demo account</strong></h3>
<p>We imagined it would require many days to have our Liip's SAP Cloud Platform up and running with validation processes and all. That's old-thinking. It took Noé less than half an hour to have it ready.</p>
<p>It may be different with a production environment but still, the <em>developer experience</em> was great as one can have a playground and try to build a Minimum Viable Product (MVP) straight away.</p>
<h3><strong>Lesson learnt #2: The SAP SDK provides a skeleton app — really — ready to play with</strong></h3>
<p>When we browsed the <a href="https://www.sap.com/developer/topics/cloud-platform-sdk-for-ios.tutorials.html">tutorials on the SAP blog</a>, we're again (positively) surprised to see that the SAP team crafted a demo app that was supposedly ready-to-use. And it was!</p>
<p>In less than 3h, we installed the app, and connected it to our Liip's SAP Cloud Platform from which we could read and write data. It actually required more time to register and activate all needed modules in the SAP Cloud Platform than to actually deploy the app on Noé's iPhone!</p>
<h3><strong>Lesson learnt #3: iOS SAP SDK documentation is not centralized enough</strong></h3>
<p>One drawback SAP has to fix if they want developers to catch-up on their new tools is the documentation. Although the skeleton app works out-of-the-box, we had hard times to follow the setup steps which were spread over the main homepage, various tutorials, and other articles. For instance, there are several modules and settings to configure and we took a lot of time to figure it out. If some SAP engineers read these lines, please keep up the good work and remove the complexity from your documentation.</p>
<figure><img src="https://liip.rokka.io/www_inarticle/35036db371f7c06db6930e5c04ee9c4e025e43eb/screen-shot-2017-06-01-at-10-55-09-149x300.jpg" alt="Our SAP iOS mobile application demo"></figure>
<p>Our SAP iOS mobile application demo</p>
<h3><strong>Lesson learnt #4: “SAP Fiori for iOS” documentation is complete and well structured</strong></h3>
<p>Compared to the previous point, the User Experience and Design documentation of SAP Fiori for iOS is impressive: it is well structured, complete, and easy to get through. All usual business use-cases are covered in a deep manner with all needed details about user flows.</p>
<p>I can't help but recommend the development department at SAP to follow their path as it would help the community to engage more, and as a result their products would take off more quickly!</p>
<figure><img src="https://liip.rokka.io/www_inarticle/d3f62505f8697f0406e1e5f4a031ae04657272ff/navigation-forward-300x167.jpg" alt='"SAP Fiori for iOS" User Interface Example'></figure>
<p>SAP Fiori for iOS User Interface Example (credits: SAP website)</p>
<h3><strong>Lesson learnt #5: User Interface customization will take you more than a day</strong></h3>
<p>Once we got the app and SAP environment ready, we dived into the code in order to play with screens' layout and data flows. As one might expect, that's what the demo app is for: testing in a playground. But when we wanted to customize the design to match our Liip corporate identity, we saw the limitation of the demo app: although it's not a blocker at all, it's good to know that it will require you more than a one-day workshop to get it implemented.</p>
<h3><strong>Summary</strong></h3>
<p>Below is what we achieved in less than a day with this new iOS SAP SDK:</p>
<ul>
<li>Setup of a Liip SAP Cloud Platform demo account with sample data</li>
<li>Running an iOS demo app on our iPhone</li>
<li>Live synchronisation of data between the app and the SAP Cloud Platform</li>
<li>Dive into the “SAP Fiori for iOS” documentation</li>
</ul>
<p>Did <em>you</em> play with the SAP SDK for iOS yet? Or even better, did you already release publicly an iOS app based on SAP? I'd be glad to share on the topic around a coffee or via the comments' section below.</p>]]></description>
          </item>
        <item>
      <title>Do I Need a Mobile Application or a Mobile Website?</title>
      <link>https://www.liip.ch/fr/blog/do-i-need-a-mobile-application-or-a-mobile-website</link>
      <guid>https://www.liip.ch/fr/blog/do-i-need-a-mobile-application-or-a-mobile-website</guid>
      <pubDate>Tue, 02 May 2017 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>In our digital era where people's attention is scattered between apps and websites, it's not easy to know whether you need a mobile application, or if a responsive website (that can be accessed via your web browser) would meet your needs.</p>
<p>I have this discussion every week with new clients, and I thought it was time to share our reasoning here at Liip in order to give you a clear answer if you still hesitate.</p>
<h2>Do You Want To Reach Your Users, or Bring Rich Features to Them?</h2>
<p>When clients come with a mobile app request, I explain them that most of the time, a web application is more efficient in terms of investment, as well as in term of reach.</p>
<p>The second question I get after this answer is: “When would I need a mobile app, then?”</p>
<p>In my point of view, mobile apps are useful when they are crafted to be <a href="https://youtu.be/OkeJg92PA4E?t=1424"><em>rich</em> — vs. the <em>reach</em></a> that web applications can provide. Rich in terms of features that are only available on mobile devices, and that can't be achieved via web technologies.</p>
<p>Here is a non-exhaustive list of smartphones features that could be useful to your product:</p>
<ul>
<li>Bluetooth — to <a href="https://blog.liip.ch/archive/2017/03/08/industrial-challenges.html">connect to a supply chain system</a></li>
<li>Geolocation/geofencing — to contact only the employees you need (i.e. avoid information overload), such as with the <a href="https://www.liip.ch/en/what/projects/tpf-communication-system-for-buses">TPF Houston product</a></li>
<li>Beacons for indoor localization — to guide a user based on its location context</li>
<li>Push notifications — to inform people in a timely manner like goals scored in the <a href="https://itunes.apple.com/us/app/the-official-uefa-champions-league-app/id1024506667?mt=8">UEFA Champions League app</a></li>
<li>Camera usage — to scan a barcode to identify a drug such as in our <a href="https://www.liip.ch/en/news/archive/2016/05/17/patchie--fun-therapy-app---germany-and-switzerland-join-forces-in-cystic-fibrosis-fight.html">Patchie medical project</a></li>
<li>Augmented Reality — to enhance human capabilities like the <a href="https://daqri.com/">Daqri innovative tools</a> which we investigate currently</li>
<li>Fingerprint authentication — to improve the User Experience by shortening the “painful” steps such as <a href="https://twitter.com/lukew/status/843976459605561344">entering your password</a></li>
<li>Offline capabilities — like the offline local search in our <a href="https://www.liip.ch/en/what/projects/schindler-spare-parts-catalogue-app">Schindler app</a> for elevator repairers</li>
</ul>
<h2>Loyalty vs. Visibility</h2>
<p>If you are already established on the digital market, a mobile app is a great loyalty tool to invest in, as it engages your audience more. From the comScore 2016 App Report, one can learn that users spend 20x more time on apps than mobile website visitors. A bit like if an app created a bubble of attention focus. Something that the web, by essence with its linking nature, doesn't provide to visitors.</p>
<figure><img src="https://liip.rokka.io/www_inarticle/0508c6c7e41f02484d357452d768ae18d5b44efe/screen-shot-2017-04-13-at-09-36-03-300x272.jpg" alt="Users spend 20x more time on mobile apps than on mobile websites"></figure>
<p>Users spend 20x more time on mobile apps than on mobile websites (Credit “comScore 2016 U.S. Mobile App Report”)</p>
<p>However, if you aren't known yet, a website viewable on smartphones/tablets/desktops might help you to stand out as the average monthly audience is 3x more important on websites than on mobile applications.</p>
<figure><img src="https://liip.rokka.io/www_inarticle/7135926153bc19a1e7a1ad9c2b43c9c0e8782f31/screen-shot-2017-04-13-at-09-36-32-300x274.jpg" alt="Mobile websites reach 3x more visitors than mobile apps"></figure>
<p>Mobile websites reach 3x more visitors than mobile apps (Credit “comScore 2016 U.S. Mobile App Report”)</p>
<h2>It's Not a Religious Choice</h2>
<p>The time when you needed to choose one way or the other is behind us. Both solutions have their pros and cons, depending on <em>your needs</em>. In an ideal world with unlimited budgets and no deadlines, both solutions should be implemented for different purposes.</p>
<p>If you're not in this comfortable solution, you better start with what is the most critical to your business: engage more an existing audience? Or expand your audience reach?</p>
<h2>Rich vs. Reach — The Summary</h2>
<p>If your objective is to provide a <em>rich</em> experience to your clients, using the full native features offered by the latest smartphone, then you should go for a mobile application that will allow you to retain them longer.</p>
<p>If you're in the B2B sector or have internal needs, then there are even more chances that a mobile app is a good choice for you. A choice that can leverage smartphones' native features that are often what can bring <a href="https://blog.liip.ch/archive/2017/03/08/industrial-challenges.html">more efficiency and productivity in industries</a>.</p>
<p>If the goal of your new product is to <em>reach</em> as many customers as possible, and that you don't need to access to specific smartphones capabilities, then you should go for a web application.</p>
<p>“Mobile apps <em>engage</em> an audience. Mobile web <em>expand audience reach</em>.”</p>
<p>I'm always interested to challenge assumptions when it comes to choose between a mobile application and a responsive website, so don't hesitate to share your use cases in the comments section below, or come to our office to chat around a coffee.</p>]]></description>
                  <enclosure url="http://liip.rokka.io/www_card_2/37e339ce75c693fe525a9a810b1cf03ab0ba3a6c/mobile-app-or-mobile-web.jpg" length="469589" type="image/jpeg" />
          </item>
        <item>
      <title>5 industrial challenges mobile applications can solve</title>
      <link>https://www.liip.ch/fr/blog/industrial-challenges</link>
      <guid>https://www.liip.ch/fr/blog/industrial-challenges</guid>
      <pubDate>Wed, 08 Mar 2017 00:00:00 +0100</pubDate>
      <description><![CDATA[<p><em>How can mobile applications support industries to undertake a digital transformation? In supply chain, risk management, or information distribution, mobile applications will make tasks easier for your employees, thus increasing efficiency. Read about 5 industrial challenges that mobile apps can solve.</em></p>
<p>First of all, it is important to carefully chose between a web and a mobile application. Mobile apps are useful when they use one of the device's native capabilities (e.g. Bluetooth, GPS, camera, etc.), and when they enhance the experience provided to the user (compared to what a web application could do).</p>
<h1>Industrial challenges</h1>
<p>The challenges industries face are often very good candidates for mobile apps as they leverage all their potential. Therefore, I have identified five recurring issues that industries are facing nowadays. These pain points can be easily relieved by mobile applications.</p>
<h2>Challenge 1: Productivity issues due to technical limitations</h2>
<p>In some industries, technology gets old and sometimes stands in the way of employees' productivity. Our project with <a href="https://www.liip.ch/en/what/projects/schindler-spare-parts-catalogue-app">Schindler</a> is a good example: technicians had to go inside the elevator shaft, detect the default, take note of the spare part reference, go back to his vehicle or office to check the catalog, to finally be able to identify the issue. Now, technicians can access the catalog directly in front of the problematic spare part, and shorten its identification by 30%. It increases process speed, elevators are fixed quicker. As a result, the users are happier, and it is profitable for the business.</p>
<figure><img src="https://liip.rokka.io/www_inarticle/f98c39b033cd21806cdb90da86069367bb130a1b/industry-1024x683.jpg" alt="old metal piece"></figure>
<p>Time for an industrial digitalization?</p>
<h2>Challenge 2: Reduce existing operating costs</h2>
<p>In the recent project implementation of <a href="https://www.liip.ch/en/what/projects/tpf-communication-system-for-buses">HOUSTON</a>, we saw how mobile technology could help to reduce drastically the operating costs of a client's existing radio infrastructure. With the use of new technologies such as VoIP (via the  <a href="https://www.twilio.com/">Twilio</a> service) coupled with mobile apps, we managed to decrease their total maintenance costs by two.</p>
<p>This kind of Return On Investment can auto-finance the project thanks to the realized savings. The funniest in this case is that the true ROI comes afterwards when the employees enjoy a better User Experience.</p>
<h2>Challenge 3: Inflexibility due to stationary machines</h2>
<p>Similar situations occurred for several industrial audits we performed. For instance, <a href="https://www.liip.ch/en/what/projects/industrial-application-for-a-watch-industry-brand">our watchmaker production line</a>, where we implemented a web application based on an API in order to satisfy the brand's IT and security regulations.</p>
<p>We are convinced that the next step of their digital transformation is: <em>go mobile.</em> Drop the static machines, allow people to prepare their procedures and actions on the mobile app, and let them connect to the manufacturing production line via Bluetooth to execute the commands needed there. This way, employees wouldn't be tied anymore to a location. Way more convenient and flexible.</p>
<figure><img src="https://liip.rokka.io/www_inarticle/1c82798e046981f7c862e331d52d9149a3b3e425/160829-company-update-c-1024x732.jpg" alt="Production Line"></figure>
<p>When a production line goes mobile, employees will save on-site time, as all their supply chain procedures are prepared in advance on their mobile app.</p>
<h2>Challenge 4: Slow reaction time to alerts that generate high risks</h2>
<p>Most of the industries need real time monitoring to ensure that supply chain risk levels are kept to their minimum. This implies costly equipments as well as human resources to track possible failures and malfunctions. Thanks to push notifications and other real time capabilities, mobile apps can both increase reaction time with their timely alerts, and decrease monitoring costs.</p>
<h2>Challenge 5: Information overflow that leads to misinformed decisions</h2>
<p>In older systems, information is often spread without the capacity to target users based on their profile or location. As people are spammed, they take decisions that are misinformed as they can't keep up with the load of data received.</p>
<p>Back to the <a href="https://www.liip.ch/en/what/projects/tpf-communication-system-for-buses">HOUSTON example</a>: mobile app built in GPS capability enables buses' agents to be geolocated. Thus, messages can be geo-targeted to provide the relevant information to the right employee. No complex locating system needs to be setup.</p>
<h1>To conclude: Carefully choose how to invest</h1>
<p>Mobile apps can solve specific industrial problems. By experience, we have seen that the best mobile app solutions are the ones who answer one need or problem, by leveraging the native devices capabilities. This kind of app that solve a problem in the employees' everyday life is what make them worth investing in.</p>
<p>It is necessary to take time to analyze your issues in order to define the best possible options to reach your goals. Appropriate workshops will ensure that you make the right investment.</p>
<p>We are happy to hear your existing challenges in the comments section below (or simply <a href="https://www.liip.ch/en/contact">contact us</a> and let's have a coffee), so that we exchange feedbacks on your struggles.</p>]]></description>
                  <enclosure url="http://liip.rokka.io/www_card_2/f72eaf0cf3bf3727bf1c18d361f77a0ef1360079/160829-company-update-c.jpg" length="84416" type="image/png" />
          </item>
        <item>
      <title>Swift Alps Conference &#8211; experimentation and collaboration</title>
      <link>https://www.liip.ch/fr/blog/swift-alps-conference</link>
      <guid>https://www.liip.ch/fr/blog/swift-alps-conference</guid>
      <pubDate>Tue, 20 Dec 2016 00:00:00 +0100</pubDate>
      <description><![CDATA[<p><em>The Swift Alps Conference has a special format focused on experimentation and collaboration. This is my report of the conference and the workshop Kilian and I held. The slides are available below.</em></p>
<p>Last month my colleague Kilian and I were pleased to attend the <a href="http://theswiftalps.com">Swift Alps Conference</a>, an experimental conference about Swift taking place in the Swiss Alps. This conference had a different format from what one can expect from a typical software development conference. In this case the <a href="https://medium.com/@swiftalps/the-concept-behind-the-swift-alps-5b07e04c7ed1">format</a> was more focused in experimenting and collaborating with other attendees with the goal of learning something new.</p>
<h2>Experimenting with strangers</h2>
<blockquote>
<p>The first session of the animation workshop with <a href="https://twitter.com/manuelescrig">@manuelescrig</a> at <a href="https://twitter.com/hashtag/swiftalps?src=hash">#swiftalps</a> is in full swing <a href="https://t.co/9Cumo7sks3">pic.twitter.com/9Cumo7sks3</a></p>
<p>— Liip (@liip) <a href="https://twitter.com/liip/status/797025464372068352">November 11, 2016</a></p>
</blockquote>
<figure><img src="https://liip.rokka.io/www_inarticle/2c5e232225df4ce432de2e5f1a6c0e6609095aa2/swiftalps.jpg" alt=""></figure>
<p>The venue was located in the Swiss canton of Valais,  in Crans-Montana, which is a ski resort in the heart of the Swiss Alps.</p>
<p>The combination of this specific location with the amount of  snow, made the conference even more magical, if possible.</p>
<h2>Views from the venue</h2>
<blockquote>
<p>Current view from the <a href="https://twitter.com/swiftalps">@swiftalps</a> <a href="https://t.co/f77uIsDAjt">pic.twitter.com/f77uIsDAjt</a></p>
<p>— Manuel Escrig (@manuelescrig) <a href="https://twitter.com/manuelescrig/status/796993695799197696">November 11, 2016</a></p>
<figure><img src="https://liip.rokka.io/www_inarticle/86d9f8da5ede5a9850548b041b2059342a5af0be/swifalps2.jpg" alt=""></figure>
</blockquote>
<h2>Talking about animations</h2>
<p>My colleague Kilian and I were in charge of being mentors and creating a workshop about animations in Swift. We decided to talk about how <strong>animations</strong> can improve the overall user experience of an app together with all the different <strong>benefits</strong> that they can bring to the user. In addition we talked about the <strong>12 basic principles</strong> of animations in design.</p>
<h2>Slides from the workshop</h2>
<iframe src="https://liip.slides.com/admin_account/deck-4-22-22-d8450a3b-74a6-44ab-8dba-43d8b6774ed1/embed" scrolling="no" frameborder="0" webkitallowfullscreen="webkitallowfullscreen" mozallowfullscreen="mozallowfullscreen" allowfullscreen="allowfullscreen"></iframe>
<p>The main part of being a mentor in the conference was running different workshops during the day where attendees could join and build/create/learn something new related to the topic of the workshop. We proposed to the attendees to build something with animations using Swift. The 3 proposals we gave were, 1.- Snow background effect, 2.- Cowbell notification badge and 3.- Cheese view transition. Here we'll just cover the first proposal of how to implement a snow background effect using Core Animation in Swift.</p>
<h2>Snow background effect</h2>
<p>Using <a href="https://developer.apple.com/reference/quartzcore/caemitterlayer">CAEmitterLayer</a> from Core Animation we accomplished the following result.</p>
<figure><img src="https://liip.rokka.io/www_inarticle/795fddfd6ba01ad792c073577704c71c0a3242bc/snow-2-1.jpg" alt="Snow Background Effect"></figure>
<p>In order to accomplish the effect, we need to create an instance of  CAEmitterLayer, then append to that instance of CAEmitterLayer the different <a href="https://developer.apple.com/reference/quartzcore/caemittercell">CAEmitterCell</a> that represent the snow flakes.</p>
<pre><code>func startSnowing() {
    emitter = CAEmitterLayer()
    emitter.emitterPosition = CGPoint(x: view.frame.size.width / 2.0, y: 0)
    emitter.emitterShape = kCAEmitterLayerLine
    emitter.emitterSize = CGSize(width: view.frame.size.width, height: 1)

    var cells = [CAEmitterCell]()
    cells.append(snowFlakeWith(color:UIColor.white))
    emitter.emitterCells = cells
    view.layer.addSublayer(emitter)
}</code></pre>
<p>To stop effect, just change the birthRate parameter in the CAEmitterLayer instance.</p>
<pre><code>func stopSnowing() {
    emitter?.birthRate = 0
}</code></pre>
<p>You can append to CAEmitterLayer different instances of CAEmitterCell with different behaviour in order to accomplish a natural movement.</p>
<pre><code>func snowFlakeWith(color: UIColor) { 
    let image = #imageLiteral(resourceName: "flake") 
    let whiteImage = image.maskWithColor(color: UIColor.white) 
    let flake = CAEmitterCell() 
    flake.birthRate = 50.0 * intensity 
    flake.lifetime = 14.0 * intensity 
    flake.lifetimeRange = 0 
    flake.color = color.cgColor 
    flake.velocity = CGFloat(350.0 * intensity) 
    flake.velocityRange = CGFloat(80.0 * intensity) 
    flake.emissionLongitude = CGFloat(M_PI) 
    flake.emissionRange = CGFloat(M_PI_4) 
    flake.spin = CGFloat(3.5 * intensity) 
    flake.spinRange = CGFloat(4.0 * intensity) 
    flake.scaleRange = CGFloat(intensity) 
    flake.scaleSpeed = CGFloat(-0.1 * intensity) 
    flake.scale = 0.1 
    flake.contents = whiteImage?.cgImage 
    return flake 
}</code></pre>
<p>Link to the project example.</p>
<p><a href="https://github.com/manuelescrig/SwiftAlps2016">github.com/manuelescrig/SwiftAlps2016</a></p>
<h2>Summary</h2>
<p>We want to thank the Swift Alps conference organizers for creating and putting together such an awesome event! Indeed, by looking at the reactions of the people, we can say it was a great success. Also thanks to the other mentors for sharing all their knowledge with us, and spending time together. Finally a big thank you to the rest of the participants for bringing such a cool vibe to the conference, making it a really special event.</p>
<p>Manuel Escrig <a href="https://www.twitter.com/@manuelescrig">@manuelescrig</a></p>]]></description>
                  <enclosure url="http://liip.rokka.io/www_card_2/bed90f26cf5f6ed2a56d5c514fa51b61d4bc6ba1/cxdbdwcxeaa0h-w.jpg" length="220969" type="image/jpeg" />
          </item>
        <item>
      <title>Easy Storyboard translation in Xcode with Swift3</title>
      <link>https://www.liip.ch/fr/blog/storyboard-translation</link>
      <guid>https://www.liip.ch/fr/blog/storyboard-translation</guid>
      <pubDate>Thu, 10 Nov 2016 00:00:00 +0100</pubDate>
      <description><![CDATA[<p><em>In this post I explain how we created a modular library. Today we are happy to release and open source this lib. You can find the code <a href="https://github.com/liip/LiipKit">on GitHub</a>. Our objective was to have one set of translation files that could be used in the storyboard and Swift</em>.</p>
<p>In our multilingual iOS projects, we always struggled to translate storyboards in Xcode. We checked all around <a href="https://cocoapods.org/">CocoaPods</a>, but couldn't find any efficient solution so far. Every time, we ended up with multiple versions of the storyboard along with multiple versions of ‘Localizable.strings'. It was hard to keep everything under control, specially when translations needed to be updated throughout all files.</p>
<p>During our last mobile project, we asked ourselves: “What if we could only have one set of translation files that could be used in the storyboard and Swift?”. We brainstormed, and created a modular library to handle this painful task. Today we are happy to release and open source this lib. You can find the code <a href="https://github.com/liip/LiipKit">on GitHub</a>.</p>
<h2>Introducing LiipKit</h2>
<h3>Translation</h3>
<p>Our main requirement was to have only one set of translation files (i.e. one for each language). This should work on two aspects:</p>
<ol>
<li>Get a translation from Swift</li>
<li>Translate a UI component from the storyboard</li>
</ol>
<p>And this is how it works:</p>
<p><strong>Swift translation importer</strong> </p>
<pre><code>import LiipKit
let my_test_translation = ~"test"</code></pre>
<p><strong>Translation within the storyboard</strong> </p>
<p>UIButton, UIBarItem and UILabel have a new attribute “Localized Title”.</p>
<figure><img src="https://liip.rokka.io/www_inarticle/4d4c3cb90c484b9cfea3e3c269064434d926bee5/liipkit-storyboard.jpg" alt="New attribute for Button, BarItem and Label in Storyboard"></figure>
<h2>There is more to come</h2>
<p>On top of the translation module, we already implemented <a href="https://github.com/liip/LiipKit/blob/master/README.md#documentation">helpers on String, Int, and Date</a>. We're constantly adding new features to our LiipKit library, so be sure to watch the <a href="https://github.com/liip/LiipKit">GitHub repository</a>.</p>
<p>We welcome any input, feedback, or pull request.</p>]]></description>
                  <enclosure url="http://liip.rokka.io/www_card_2/4d4c3cb90c484b9cfea3e3c269064434d926bee5/liipkit-storyboard.jpg" length="39387" type="image/png" />
          </item>
        <item>
      <title>Introducing Swift 3.0</title>
      <link>https://www.liip.ch/fr/blog/introducing-swift-3-0</link>
      <guid>https://www.liip.ch/fr/blog/introducing-swift-3-0</guid>
      <pubDate>Tue, 20 Sep 2016 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>With the new iPhone 7 Apple has released the iOS 10 operating system and with it comes Xcode 8 and a new version of the Swift language for the iOS developer community.</p>
<p>Swift 3.0 is an open source language that has been developed by the community together with Apple Engineers.</p>
<figure><img src="https://liip.rokka.io/www_inarticle/6506febdd97c8f186996ad400e68d011e955e5f0/windex.jpg" alt="Swift Logo"></figure>
<p>One of the great things about developing an open source language is that everybody can see the <a href="http://apple.github.io/swift-evolution/">evolution of the language</a> and <a href="https://github.com/apple/swift">inspect the code</a>. In the official <a href="https://swift.org/blog/swift-3-0-released/">release notes</a> there is a list of all the changes that have been implemented in the new Swift version.</p>
<p><strong>Swift 3.0</strong> is also the first release to include the <a href="https://swift.org/package-manager/">Swift Package Manager</a>, a tool for managing the distribution of Swift code trough dependencies.</p>
<h2>Top 10 changes in Swift 3</h2>
<h3>Enums</h3>
<h4>1.- Import Objective-C Constants as Swift types</h4>
<h3>Parameters</h3>
<h4>2.- Consistent first argument labels</h4>
<h4>3.- #keyPath</h4>
<h4>4.- Better translation of Obj-C APIs</h4>
<h3>Functions And Closures</h3>
<h4>5.- Closure parameter names and labels</h4>
<h3>Collections</h3>
<h4>6.- Remove the ++ and – operators</h4>
<h3>Good Looking C</h3>
<h4>7.- Import as member</h4>
<h4>8.- Modernizing Swift's Debugging Identifiers</h4>
<h4>9.- Modernized dispatching</h4>
<h3>API Design Guidelines</h3>
<h4>10.- Removing ‘NS' prefix</h4>
<p>The ‘NS' prefix from key Foundation types is getting removed in Swift 3.</p>
<p>See <a href="https://github.com/apple/swift-evolution/blob/master/proposals/0086-drop-foundation-ns.md">SE-0086 – Drop NS Prefix in Swift Foundation</a>.</p>
<p>For those who want to read more about it: Apple has released a free book about the Swift Programming Language (Swift 3 beta) on their iBook store.</p>
<h2>Migrating from Swift 2.2</h2>
<p>Swift 2.2 unfortunately is not supported with Xcode 8 anymore. This means that you will need to migrate your current projects to Swift 3.0 if you want to compile them with the new Xcode.</p>
<p>The problem is that all the 3rd party libraries need to have the same version as your Swift project. And some of them may not be ready yet.</p>
<p>In order to make the transition smoother, Apple is still supporting Swift 2.3 in Xcode 8. Swift 2.3 is almost identical to 2.2.</p>
<h4>How to migrate?</h4>
<p>Xcode 8 includes a migration tool in order to “help” with the process. A reality check revealed that after using the tool you will end up with a list of warnings that you will have to fix manually.</p>
<p>There is a <a href="http://www.jessesquires.com/migrating-to-swift-3/">good article</a> by Jesse Squires on how to migrate libraries from Swift 2.2 to Swift 3.0 that I highly recommend.</p>
<h2>What next</h2>
<h4>Swift 4</h4>
<p>Chris Lattner, a senior director of the Developer Tools Department at Apple, <a href="https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160725/025676.html">posted a lengthy note to the Swift mailing list</a> today that looks back at the development of Swift 3.0 and sets some expectations for Swift 4.0 next year.</p>
<p>Apple is planning to release two major Swift updates next year. Swift 3.1 in spring and Swift 4.0 in Fall 2017. For the development of Swift 4.0 there will be two stages. During stage 1 Apple would like to focus on source and ABI stability first, and then move on to other features in stage 2 depending how much extra time there is.</p>
<p>To read more about Swift, visit <a href="https://swift.org/">swift.org</a></p>]]></description>
                  <enclosure url="http://liip.rokka.io/www_card_2/6506febdd97c8f186996ad400e68d011e955e5f0/windex.jpg" length="7160" type="image/png" />
          </item>
        <item>
      <title>Apple TV app &#8211; or how to continuously innovate</title>
      <link>https://www.liip.ch/fr/blog/apple-tv-app-or-how-to-continously-innovate</link>
      <guid>https://www.liip.ch/fr/blog/apple-tv-app-or-how-to-continously-innovate</guid>
      <pubDate>Mon, 23 Nov 2015 00:00:00 +0100</pubDate>
      <description><![CDATA[<h2>Continuous Innovation at Liip</h2>
<p>Doing Agile at Liip does not always mean we live in a continuous flow of sprints, endlessly. Sometimes the comfortable stream of sprints breaks for a while, usually between two projects. This is often a good opportunity to hack on new technologies or try something new. We recently had one of these break and it was the perfect time to try once again our innovation process.</p>
<p>In fact, this process starts before we have one of those breaks. First of all, the whole team lists any innovation idea – could be anything – and anyone is invited to contribute (at the moment we have a dozen projects listed). We try to groom this list as often as possible to keep it relevant. Then, when time comes we can just go to this list and grab a project we want to work on.</p>
<p>Doing innovation keeps us close to new technologies.</p>
<h2>The project: an Apple TV app</h2>
<p>As part of the Liip “Native apps” guild (officially named “Mobile” guild internally, but we might refactor it looking at the TV screen sizes!), the choice was almost obvious: we decided to hack on the new Apple TV, now opened to developers. The exciting aspect of this device is closely related to the unusual screen size connected to it. The remote also gives us a new TV experience (still from a developer perspective, I am not trying to sell anything).</p>
<p>The idea was simple. I wanted to adapt the mobile application of one of our client, UEFA, for Apple TV. They have lots of photos and videos, so basically the perfect content to play with.</p>
<p>Xcode 7 has already everything for tvOS (Apple TV dedicated Operating System) with its own SDK and simulator. Only a few clicks are required to get started and have a “Hello world” app up and running.</p>
<p>Then we had to go through <a href="https://developer.apple.com/library/tvos/documentation/General/Conceptual/AppleTV_PG/index.html#//apple_ref/doc/uid/TP40015241-CH12-SW1">the basics</a> and learn <a href="https://developer.apple.com/tvos/human-interface-guidelines/">the visual guidelines</a>. These two links are worth reading to get to know the environment, even if you have been using the previous version of Apple TV. Lots of new visuals have been added, though I really fancy the  <a href="https://developer.apple.com/tvos/human-interface-guidelines/#focus-and-parallax">Focus and parallax</a>.</p>
<p>Then, coding for the TV is basically the same as coding for other iOS platforms. It took us roughly six man days to create an app from scratch with 3 pages containing different media content (photos, videos) coming from an API. The result on a big screen is very rewarding!</p>
<h2>Now what?</h2>
<p>We are going to discuss with several of our clients where such a big device would bring added value to their end users – e.g. e-commerce domain and sport' industries.</p>
<p>Also we plan to use this knowledge internally for some potential dashboard apps.</p>
<p>We will keep you posted with our next findings/experiments.</p>]]></description>
          </item>
        <item>
      <title>Writing iOS Layout Constraints The Easy Way</title>
      <link>https://www.liip.ch/fr/blog/writing-ios-layout-constraints-the-easy-way</link>
      <guid>https://www.liip.ch/fr/blog/writing-ios-layout-constraints-the-easy-way</guid>
      <pubDate>Thu, 27 Aug 2015 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>Coming from a web-development background, native iOS development always feels a bit clunky to me when it comes to creating the layouts.</p>
<p>Yes, there is the Interface Builder and it is a great tool, but sometimes,</p>
<p>things get more generic and building the views and layouts can be more efficiently done by hand.</p>
<p>Except – layout constraints! Writing layout constraints can be tedious work.</p>
<p>Example, making an element the half of the width of its parent element in objective-c:</p>
<pre><code>[self.view addSubview:centerView];

// Width constraint, half of parent view width
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:centerView
                               attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual
                               toItem:self.view attribute:NSLayoutAttributeWidth
                               multiplier:0.5 constant:0]];</code></pre>
<p>It is not much better in C# with Xamarin either:</p>
<pre><code>View.AddSubview(centerView);

// Width constraint, half of parent view width
View.AddConstraint(
    NSLayoutConstraint.Create(centerView, 
        NSLayoutAttribute.Width, NSLayoutRelation.Equal, 
        View, NSLayoutAttribute.Width, 
        0.5f, 0f
   )
);</code></pre>
<p><strong>But behold! There is our ConstraintHelper!</strong> </p>
<pre><code>ConstraintHelper.Attach(centerView).WidthOfParent(0.5f).Top().Center();</code></pre>
<p>The ConstraintHelper is a small C# library to help with the layout constraints and it brings less common concepts like <a href="https://en.wikipedia.org/wiki/Method_chaining">Method Chaining</a> to the layout constraints.</p>
<p><a href="https://github.com/semiroot/ConstraintHelper">ConstraintHelper is Open Source and can be forked from GitHub</a>.</p>]]></description>
          </item>
    
  </channel>
</rss>
