<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Sirisak Lueangsaksri on Medium]]></title>
        <description><![CDATA[Stories by Sirisak Lueangsaksri on Medium]]></description>
        <link>https://medium.com/@spywhere?source=rss-4e41bb0c6f4c------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*1U2J-fZI83AEFWXqk1r91A.jpeg</url>
            <title>Stories by Sirisak Lueangsaksri on Medium</title>
            <link>https://medium.com/@spywhere?source=rss-4e41bb0c6f4c------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Thu, 16 Apr 2026 01:34:26 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@spywhere/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Why you should do an open-source project?]]></title>
            <link>https://medium.com/@spywhere/why-you-should-do-a-open-source-project-737545efff5f?source=rss-4e41bb0c6f4c------2</link>
            <guid isPermaLink="false">https://medium.com/p/737545efff5f</guid>
            <category><![CDATA[open-source]]></category>
            <category><![CDATA[software]]></category>
            <category><![CDATA[developer]]></category>
            <category><![CDATA[self-improvement]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Sirisak Lueangsaksri]]></dc:creator>
            <pubDate>Thu, 16 Jun 2016 09:36:20 GMT</pubDate>
            <atom:updated>2016-06-16T13:23:04.746Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/455/1*PW6lORfJV-kEJ8T8Z5OjIQ.png" /></figure><p>It is undeniable that there are a lot of open-source projects out there on the internet that make our life and our work a lot easier. From a small utility that help our repeatable tasks done a lot faster, to a great framework that sit inside many applications. Yet there are still many developers that never contribute their software to open-source community.</p><p>Develop an open-source project can be done in many different ways. For example, you can develop a small extension to the software you work with or make a new software that help solve other people’s problems. With a project like this, you can learn many aspect of software development as you extends the functionalities of your software over time.</p><p>Here are the 6 points I have got from develop my own open-source projects that help me learn and improve my knowledges in the software development field.</p><h4>1. You know what is the problem and how to solve it.</h4><p>When you develop a software, you should already know what problems that your software is solving and how to solve it. When you starts a new project, you will see how many problems that software can help and how feasible to develop a software to solve it. Eventually, you may find a problem that leads you to a software that can be a viable product for your potential company.</p><h4>2. You learn how software works in different environments with real users.</h4><p>With real users, you can see how your software works across different of things like Operating System, Devices, Internet Connections or even your software itself for example, the compatibility of your software. You may find yourself that your software still solve the problems for them or not just by looking at how is your software grow.</p><h4>3. You know how your software stand on the (free) market.</h4><p>Even though your software is great, many people do not heard of your software if you do not do anything to spread the words. Or if you are not the “marketing guy” like me, you will see how your software rank up purely by its functions.</p><p>Show your software in the right place at the right time can make a huge different directly to yourself. Your software could be the best one to solve that particular problems over night.</p><h4>4. You learn how to improve your software.</h4><p>With open-source software, anyone can contribute to the project. While you can learn from someone else’s project, you may find your users send you a feedback on your project or even help contribute to it. User feedbacks are a great things in the software development that help grow your software even further.</p><h4>5. You learn how your software structure works with other developers.</h4><p>In contrast to users, if someone contribute to your project, you may see how your project structure works when they get their hands on. Moreover, you can learn by code review from their contribution to see how they write their code upon this kind of structure.</p><h4>6. You learn how much your documentations help your users.</h4><p>Your user growth is also affected by your documentations. If your software is great but your documentation is poor, surely not everyone will know how your software works from the thin air. Making a good documentation also help you on reviewing your code on the later day.</p><p>Develop an open-source software gives us a lot of knowledges that we can use in our future software projects or even in current project we are working on. Furthermore, if we all contribute to open-source community, there will be a lot of learning resources, examples, frameworks and tools that help the world a lot better.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=737545efff5f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Wireless Ad-hoc iOS Application Deployment on Dropbox]]></title>
            <link>https://medium.com/@spywhere/wireless-ad-hoc-ios-application-deployment-on-dropbox-94d291b4e4c1?source=rss-4e41bb0c6f4c------2</link>
            <guid isPermaLink="false">https://medium.com/p/94d291b4e4c1</guid>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[deployment]]></category>
            <category><![CDATA[swift]]></category>
            <dc:creator><![CDATA[Sirisak Lueangsaksri]]></dc:creator>
            <pubDate>Thu, 14 Jan 2016 05:11:03 GMT</pubDate>
            <atom:updated>2016-01-14T07:04:33.433Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/552/1*gQPeFeES4Woy2Ys9Epz1CA.png" /></figure><p>With the limited time of development, the application deployment can take a lot of our precious time over the year. I decided to improve this flow by automated the process from building, archiving and deploy to the various deployment environment. With the help of <a href="https://fastlane.tools">fastlane</a> tools and my <a href="https://github.com/spywhere/iOSDeploy">iOSDeploy</a> script, I can deploy the application with a push of my finger.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1002/1*bCVQ1ulZ86ZEY_3Gl0XUug.png" /><figcaption>My iOSDeploy repository</figcaption></figure><p>In order to automated the project deployment, fastlane’s <a href="https://github.com/fastlane/gym">gym</a> and iOSDeploy must be installed. Both can be install using the command (within the project directory)…</p><pre>sudo gem install gym<br>git clone <a href="https://github.com/spywhere/iOSDeploy">https://github.com/spywhere/iOSDeploy</a> iosdeploy</pre><p>After installation finished, in the project directory would look like this…</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/612/1*NMVc1Vg0onOfSDlhPAnDIg.png" /><figcaption>Inside my example iOS project directory</figcaption></figure><p>Fastlane’s gym will be our build tool and iOSDeploy will be our deployment tool. If you already have your own build tool, you could only install iOSDeploy and any build configurations in this post could be skipped.</p><p>Next, before we configure the project, we have to setup the first run of iOSDeploy. Make sure you already have Dropbox app with Full Dropbox access (no need to be a production one) ready and then run…</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/602/1*G9DsdndYi-pEB7V-P1uTZw.png" /></figure><p>After setup, you should see a .iosdeploy file created within your project directory (this file then can be shared to your co-worker to let them deploy the application without need to setup it again).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/602/1*OmEkUUfh-qkrmt9d-wzcog.png" /></figure><p>In order to test the setup, I have export the .ipa file to output folder and run…</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/602/1*Ilbawd7g6jtgtz0yL3xTGw.png" /></figure><p>As you can see at the bottom of the screen, a direct URL to the Dropbox file which generated by iOSDeploy (I will show you how it looks like later in the post).</p><p>Now we know that the deployment is successfully setup, next step we will automated the build, archive and deployment process by configure our project.</p><p>To make our deployment simpler by automated the process, first we need to add a new target…</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QNvNprZZcn_8qHQxsERqKQ.png" /></figure><p>Since my target is not going to build anything by Xcode (we use fastlane’s gym), I will choose Aggregate target type instead (you could use any of the target type, it is just my project not required for any particular target type).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/728/1*5AKmXMK3mDl4tjjdTS7gpw.png" /></figure><p>I will named it “Deploy Example App” to make it easy to understand…</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/727/1*tG_Usb3tyyTDzpXdPfXhVA.png" /></figure><p>Now you should see your target showing up on the left hand side of the editor, next step is to configure the target.</p><p>We will add a Run Script Phase in the Build Phases tab, for me I will also add another Run Script Phase to build and archive the project using gym.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*o0Eo4gXHKmnITmxjauGgpQ.png" /></figure><p>And now we should be ready to deploy our application, fully automated.</p><p>To deploy our application, switch the target to a newly created target…</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/376/1*0wV9-xqElY7lCBLzeSnq9Q.png" /></figure><p>And just build the project. We should see the message show that our build is success.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/674/1*-YFOfJBuUJQGJW-gh7Kmrg.png" /></figure><p>And that is it, we just deploy our application.</p><p>Now on the user side, when they want to install the application, simply send them an URL which generated by iOSDeploy. When they open, they should see a page similar to this one…</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/1*7BJ7IbWSkARr-9s6QfjvhA.png" /></figure><p>When they want to install application, just hit the Install button and the device will ask them to install…</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/1*tGwEQA4Ut4oSajQGAV00gQ.png" /><figcaption>Install confirmation dialog</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/1*Qo9T7BrrRvWvcKd5uhfF5w.png" /><figcaption>Application has been successfully installed</figcaption></figure><p>And they now can run the application…</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/1*1E6BxZysyJZZWJHG8g3JOQ.png" /></figure><p>When you deploy another build, the iOSDeploy will regenerate the page that the latest build will be on top of the page.</p><p>And that is how the automatic deployment works with fast lane’s gym, iOSDeploy and Dropbox.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=94d291b4e4c1" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Evolution of Atom language]]></title>
            <link>https://medium.com/@spywhere/evolution-of-atom-language-306d3b38ac45?source=rss-4e41bb0c6f4c------2</link>
            <guid isPermaLink="false">https://medium.com/p/306d3b38ac45</guid>
            <category><![CDATA[design-language]]></category>
            <category><![CDATA[programming-languages]]></category>
            <category><![CDATA[programming]]></category>
            <dc:creator><![CDATA[Sirisak Lueangsaksri]]></dc:creator>
            <pubDate>Wed, 09 Dec 2015 04:56:13 GMT</pubDate>
            <atom:updated>2015-12-09T07:01:32.066Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*k9LNZAj3Jf5SaxQ5sXJUmQ.png" /></figure><p>In my <a href="https://medium.com/@spywhere/keywords-why-we-need-it-can-t-we-live-without-it-5b70be049500#.620e8gb1q">recent post</a>, I promised that I will show you how I design a programming language for my own uses. And here it is!</p><p>The first iteration of language design is pick a language name. Personally, I love how things named by their parent name based on the real world. Take a look at Apple for example, their company name “Apple” with some of their product name “Macintosh”, which is one of apple varieties, mimics how the real world object are named.</p><p>My company name is consists of a word that means particle, so the language should be named with something tiny as a particle, so I come up with “Quark” but the concept of quark is too complicated to me, so I pick “Atom” instead. More over, Atom source code will be compiled into “Molecule” byte code since many atoms bond together into molecule, hence the name.</p><p>Before starting the language design, I want a language to be easy to link into 3rd-party programs (game engine in my case). So the language should be scripting language that has small footprint on the language itself and more power on the standard library for standalone application instead.</p><p>The decision behind “compiled to byte code” rather than “REPL (read-eval-print-loop)” is I really want the Atom program to be modifiable without recompile the whole system again (thinking about Runtime Virtual Machine. Same machine, different programs). Still, Atom language allows program to use Atom internally without compile to byte code since the language suite is consists of language components. You could use Atom language parser to give you an abstract syntax tree of the language and compile it yourself, or send it immediately to a “Molecule” virtual machine inside your program to run it.</p><p>The next iteration is a bit out of focus, I immediately write down my (ideal) language sample, just to see an overview of the language. Send it to my friends and see if they like it or not. And here is the first sample of the language in that iteration.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/52d7a387fb2427a1a6957d8fd19db545/href">https://medium.com/media/52d7a387fb2427a1a6957d8fd19db545/href</a></iframe><p>The feedback from my friends are positive, they like how the language is minimal but give the familiar look. The language inspired a lot from Python with a bit of Swift and C. The only intention of the language that shared until these day is the typing speed (which is why I love Python so much). The language (at that moment) aims to be easy to implement, which is why the code block still there and there are only one-line if all around.</p><p>Then the next iteration comes, I starts by writing “the language principles”, a set of goals to keep the language on the line. The first three “principles” of the Atom language are…</p><ul><li>Language should allows developers to write code faster and can be picked up easily.</li><li>Language should be able to link with 3rd-party engine in a few steps as possible.</li><li>Language should be flexible enough to extends its functionalities.</li></ul><p>So, I refine the language to be object-oriented by introduced a concept of class into the language (inspired by Java), which is why the keywords and the annotations are borrowed. Additionally, I also remove the need of semicolon after each conditional statement, to make it easier to type.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/bc7bb73e852378522bd3003ed295f13a/href">https://medium.com/media/bc7bb73e852378522bd3003ed295f13a/href</a></iframe><p>Once the language is stable enough, I take a time to thinking about standard library that ship with the language itself and spark on the data collection types. In whitespace insensitive language (such as Objective-C or JavaScript), arrays and dictionaries can be wrote within one line. This conflicts with my language principle as it harder to read one line declaration of array or dictionary, so I gather some examples from various languages including YAML. Finally, I decided to use indentation based for the array and dictionary declaration, and here is the first version of it.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/8e532d3acfd50125469f7b7a2e342a04/href">https://medium.com/media/8e532d3acfd50125469f7b7a2e342a04/href</a></iframe><p>Now comes the <a href="https://medium.com/@spywhere/keywords-why-we-need-it-can-t-we-live-without-it-5b70be049500#.620e8gb1q">keywords or no keywords</a> part, as I try different language designs I comes up with an idea about “Why we need keywords?” since the first time I write computer program, I always wonder about English keywords “Why programming language does not exists in my native language?”. So I try reduce the keywords, make them into two versions (with and without keywords), send to even more friends and let them see if they like what they see or not.</p><p>Gladly, they did like the keyword version since that change my perspective about keywords a lot. So the language principles are changed by aims for easy to read, easy to write and that gives me the really clean look of the language.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/98f5e0d92eed4c8dcb68089b70ea21f2/href">https://medium.com/media/98f5e0d92eed4c8dcb68089b70ea21f2/href</a></iframe><p>The latest version until this date (December 2015), make it even more cleaner. Again with YAML, Atom language now use indentation with dashes and colons to create a list, set and dictionary. Colons are bring back as a required part to give more context on the code block. Conditional statements and loops are reduce the need of parenthesises and use Python-style statement to increase the typing speed. And more such as…</p><ul><li>“let” keyword, optionals and string interpolation. All inspired by Swift.</li><li>Lambda, assignment destructuring and variable arguments. All inspired by ECMAScript 6</li><li>List comprehensions and overall look of the language. All inspired by Python (version 3 to be specific)</li></ul><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/296487037768ee4da6a642b09faca224/href">https://medium.com/media/296487037768ee4da6a642b09faca224/href</a></iframe><p>There are some parts of the language need to be refine but the language design process are quite fun. Just like drawing, you keep imagine how your language would look like and give them a shot, may be you can see how small things can be a big part of your design.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=306d3b38ac45" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Keywords: Why we need it? Can’t we live without it?]]></title>
            <link>https://medium.com/@spywhere/keywords-why-we-need-it-can-t-we-live-without-it-5b70be049500?source=rss-4e41bb0c6f4c------2</link>
            <guid isPermaLink="false">https://medium.com/p/5b70be049500</guid>
            <category><![CDATA[programming-languages]]></category>
            <category><![CDATA[language-grammar]]></category>
            <category><![CDATA[computer-language]]></category>
            <dc:creator><![CDATA[Sirisak Lueangsaksri]]></dc:creator>
            <pubDate>Wed, 18 Nov 2015 15:31:51 GMT</pubDate>
            <atom:updated>2015-12-14T15:43:17.114Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9LrIinNPUtzHznjkux32Kg.png" /><figcaption>Keywords: With or Without it?</figcaption></figure><p>In my recent project, I want to create a high-level computer language that compile to byte-code, aim to be a highly flexible language extension, fast to write and easy to read. Keywords play a huge part of the language design I have come to think about, especially on the fast to write and easy to read goal.</p><p>Many computer languages have keywords, they are used to express the programming logic in a way we are comfortable with. But why we need it? Doesn’t it make us a lot easier to use a natural-language-independent computer language? Let’s take a look.</p><p>In C and their family languages, most of the keywords are shared the same meaning which make us comfortable when we switch to another C family language. Here is the example program in Java-like language which I will use to illustrate the different language design I come across (please note that the language is a design concept and might or might not be implement in practice).</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/a05c93dd0f7e98eedbaff08d2d76a73a/href">https://medium.com/media/a05c93dd0f7e98eedbaff08d2d76a73a/href</a></iframe><p>When I thinking about the idea of fast to write language, the first thing that comes to my mind is <em>less code</em>. Sure, without keywords, the language will be a lot shorter and can be express in a line or two. Take a look at the no-keyword version of my language below.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/958852d645076ac67fd2a95fd48721d7/href">https://medium.com/media/958852d645076ac67fd2a95fd48721d7/href</a></iframe><p>You can see how the language can be changed upon the natural language you currently use today. Every single name can be changed into whatever you feel like to use.</p><p>Seem nice? Turn out, it is not that good when come to the typing speed. You can see how each punctuation express the logic but most of them have to press the Shift key in order to type those characters, this takes a lot of time to type when come to the large program.</p><p>Now, let’s take a look at an updated version of the previous language. This time I add the keywords back.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/c3fd30f611fb9af866d04bc72e92ec08/href">https://medium.com/media/c3fd30f611fb9af866d04bc72e92ec08/href</a></iframe><p>Okay, it a lot easier to write this time but we have trade the speed of typing with some limitations of the language. We could implement the language to have no reserved words but keywords (<a href="http://stackoverflow.com/questions/1078908/what-is-the-difference-between-keyword-and-reserved-word">What is the difference between “keyword” and “reserved word”?</a>). Surely, it can use any word for the name of things but take a look at this line of code.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/bb0df7c65bc130356d744e7dd2da5f3f/href">https://medium.com/media/bb0df7c65bc130356d744e7dd2da5f3f/href</a></iframe><p>You can see how frustrating the code can be read, not to mention the ambiguity of the expression.</p><p>So, how can we implement it? Well, just take a step back and think about “What are the language goals?” instead of “How the language will looks like?”. We design a language to be fast to write and easy to read, so the keywords and reserved words in a language are acceptable which come to the only design that pass the rules, the keyword version.</p><p>But still, there are room for the improvements, since we design the language to be easy to read and fast to write, not easy to read and fast to process. We could design the language to use indentation as a block of code, this way we reduce the number of lines and also make the language faster to write. Just like how <a href="http://yaml.org">YAML</a> can express the object much shorter than <a href="http://json.org">JSON</a>.</p><p>Now take a look at the final design of the language.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/98f5e0d92eed4c8dcb68089b70ea21f2/href">https://medium.com/media/98f5e0d92eed4c8dcb68089b70ea21f2/href</a></iframe><p>That seems a lot better both to read and to write. But doesn’t it seem a bit familiar? Python? Take a look at Python version.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/103f357a07ebbf6639403a570ebf1662/href">https://medium.com/media/103f357a07ebbf6639403a570ebf1662/href</a></iframe><p>Surely it does seems like Python a lot, just only some colons and class declaration being omitted. But why another language? Well, Python is a great language but it is overpower for the task. And if you looks closely, you can see how my language express the class by the whole file rather than multiple declarations in the same file. Just like Java but with Python syntax.</p><p>But that only a glimpse of the language I designed. The language features are a lot more with the influences from various languages such as Java, Python, Swift or even ECMAScript 6. I will write the update once I got the language fully functional, ready and proven to be implemented later on.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5b70be049500" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Continuous Integration with OS X Server and Bots]]></title>
            <link>https://medium.com/@spywhere/continuous-integration-with-os-x-server-and-bots-aa07d8f569f8?source=rss-4e41bb0c6f4c------2</link>
            <guid isPermaLink="false">https://medium.com/p/aa07d8f569f8</guid>
            <category><![CDATA[continuous-integration]]></category>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[testing]]></category>
            <dc:creator><![CDATA[Sirisak Lueangsaksri]]></dc:creator>
            <pubDate>Wed, 18 Nov 2015 04:27:03 GMT</pubDate>
            <atom:updated>2015-11-18T04:27:03.702Z</atom:updated>
            <content:encoded><![CDATA[<p>If you are working on a big and complex iOS project, chance that you are working with XCTest is high. You may already familiar with Unit Testing and UI Testing but you may not run your tests automatically before, or if you are able to run the tests automatically, you should have an idea of how hard to configure the system to supports the iOS testing (not to mention the system architecture itself!).</p><p>Apple provides an easy, Xcode friendly continuous integration system within their ecosystem called OS X Server. OS X Server is an operating system which contains multiple services for managing and serving the clients (such as User Directory, Mails, Messaging and more!). One of the interesting service OS X Server provided is Xcode Server. Xcode Server serves as a continuous integration server for iOS projects which supports both Unit Testing and UI Testing on both simulators and actual devices, additionally Xcode Server also serves as a Git remote server in which hold the project source codes in a unified place.</p><p>Once the server is setup, client can creates, run and see the testing result from an automated testing configurations called Bot, right in the Xcode.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/695/1*IDSmcN8EhpjyIufRrozXaA.png" /><figcaption>You can create a bot, right in the Xcode itself!</figcaption></figure><p>Configure the iOS project for testing in the Xcode Server is also easy, if your project can be built and run in the Xcode, then it can also build and run on the testing environment on the Xcode Server. No further configuration needed, save a lot of our time!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/398/1*o4YWGO_-LX18Xq4ns2pOfQ.png" /><figcaption>Bot is integrating the testing sequence.</figcaption></figure><p>Once the testing configuration is setup, the bot will be run according to the configuration. Each testing session, called Integration, consists of collecting the source code, building, testing and also collecting the output from the project (such as iOS app bundle) along with the testing results.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9ZiIbeffQZ87TJJ9ebSoKw.png" /><figcaption>Testing result showing some devices are pass the tests while some are not.</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LgRMwaxO-btEiFBK56joYA.png" /><figcaption>Details of the tests</figcaption></figure><p>With these results, the team can identify and solve the problem right away. Increase the software quality and reduce the shipping time while maintain the cost on the same level.</p><p>OS X Server can be downloaded for free in the <a href="https://developer.apple.com/osx/download/">OS X section</a> if you have an Apple developer program or $19.99 on the <a href="https://itunes.apple.com/en/app/os-x-server/id883878097?mt=12">Mac App Store</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=aa07d8f569f8" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>