<?xml version="1.0" encoding="UTF-8"?><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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Codethink &#187; plugin</title>
	<atom:link href="https://codethink.no-ip.org/tags/plugin/feed" rel="self" type="application/rss+xml" />
	<link>https://codethink.no-ip.org</link>
	<description>A blog about coding, life, and other arbitrary topics</description>
	<lastBuildDate>Sun, 15 Mar 2026 21:30:15 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.29</generator>
	<item>
		<title>[iOS] Jira Mobile Connect</title>
		<link>https://codethink.no-ip.org/archives/788</link>
		<comments>https://codethink.no-ip.org/archives/788#comments</comments>
		<pubDate>Fri, 04 Nov 2011 06:48:08 +0000</pubDate>
		<dc:creator><![CDATA[aroth]]></dc:creator>
				<category><![CDATA[banter]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[jira]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://codethink.no-ip.org/wordpress/?p=788</guid>
		<description><![CDATA[Not long ago Atlassian released version 1.0 (now up to 1.0.7) of their Jira Mobile Connect plugin. This is a plugin for Jira (obviously) that aims to simplify testing, error-reporting, and feedback collection/management for iOS applications. Assuming that you are &#8230; <a href="https://codethink.no-ip.org/archives/788">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Not long ago Atlassian released version 1.0 (now up to 1.0.7) of their <a href="https://plugins.atlassian.com/plugin/details/322837" target="_blank">Jira Mobile Connect plugin</a>.  This is a plugin for Jira (obviously) that aims to simplify testing, error-reporting, and feedback collection/management for iOS applications.  Assuming that you are doing iOS software development and have a Jira server instance running (which you really should if you are doing any nontrivial amount of development work of any variety) then using this plugin in your apps is really a no-brainer.  Jira Mobile Connect includes a number of very cool features, such as the ability for users to attach annotated screenshots/images to their feedback reports, to record audio to attach with their feedback, and even to chat back and forth with the developer(s) working on their issue/ticket .  And of course it does basic crash logging and reporting, as well. </p>
<p>Previously if you wanted a free/open-source crash reporting framework for iOS your options were basically limited to <a href="http://quincykit.net/server.html" target="_blank">QuincyKit</a>, which is a serviceable but basic solution.  Sadly, the backing architecture used by the QuincyKit server is not well designed and scales very poorly with the number of crash reports in the system.  Once you have around 5,000 you&#8217;ll notice the server slowing down significantly, and go much beyond 10,000 that and the system grinds to an unusable halt.  With a day or so of database and code refactoring, these scalability issues can be resolved, creating a system performant enough to track millions of error logs or more.  But that&#8217;s a subject for another time.  The point for today is that despite its basic level of functionality and flawed server architecture, there are a few key areas in which QuincyKit blows the default implementation of Jira Mobile Connect out of the water:</p>
<ol>
<li>Automatic grouping of crash reports.</li>
<li>Automatic symbolication of error logs.</li>
</ol>
<p>If you have any experience whatsoever with supporting multiple high-volume iOS applications you will instantly realize that these are features that you want.  They might even be features that you want more than annotated screenshots, audio feedback, user chat, or seamless integration with Jira and all the awesomeness that Jira brings.  In short, Jira Mobile Connect&#8217;s lack of support for these two key features may cause serious developers to pass it over in favor of other solutions.  </p>
<p>Without grouping every single crash will be creating a new ticket in Jira that you need to track and resolve.  Multiple instances of the same crash will have to be manually flagged as duplicates within Jira.  And without symbolication trying to actually map back from an error log to the line of code that caused it is an exercise in futility, or at best, tedium.</p>
<p>In any case, rather than abandon the excellent potential shown by Jira Mobile Connect I decided that instead I would attempt to patch it up and add the missing features myself.  It&#8217;s all open-source code, after-all, and if the tangled mess of PHP that is QuincyKit server can provide these features then they can&#8217;t be that difficult to implement.  Unfortunately I had to change too many files in too many different places to show the code here, but if you want the short version of it I was able to implement both grouping and symbolication, and you&#8217;re welcome to view the complete diffs on bitbucket:</p>
<p><a href="https://bitbucket.org/aroth_iapps/jiraconnect-ios-iapps/compare/..atlassian/jiraconnect-ios" target="_blank">https://bitbucket.org/aroth_iapps/jiraconnect-ios-iapps/compare/..atlassian/jiraconnect-ios</a> (client/native iOS code)<br />
<a href="https://bitbucket.org/aroth_iapps/jiraconnect-jiraplugin-iapps/compare/..atlassian/jiraconnect-jiraplugin" target="_blank">https://bitbucket.org/aroth_iapps/jiraconnect-jiraplugin-iapps/compare/..atlassian/jiraconnect-jiraplugin</a> (server/Java code)</p>
<p>One interesting side-effect of adding groups was that it became possible for multiple client UID&#8217;s to be associated with a single Jira ticket.  This had an important implication for feedback notifications/chat in that the reference implementation allowed only a single UID to be associated with each Jira ticket.  Since the UID is used for determining what notifications/updates to send to the native client, this restricted update notifications to a single user per ticket.  Not too useful if you have a common crash that thousands of users have experienced.  The implementation above extends the data model to allow multiple UID&#8217;s to be stored against a single Jira ticket, allowing each UID to be updated when new feedback is posted by the developer on a ticket.  In essence, implementing grouping also required the implementation of group feedback/chat.</p>
<p>There is one caveat with my server implementation, in that it assumes the existence of the &#8216;<em>symbolicatecrash</em>&#8216; utility on the system&#8217;s runtime <em>PATH</em>.  This means that it will only work if your Jira server is hosted on a Mac, with the proper XCode developer tools installed (and with your application&#8217;s .app and .dSYM files copied to the local filesystem).  This is of course a requirement regardless if you want automatic symbolication to work on any sort of system; somewhere there needs to be a Mac with &#8216;<em>symbolicatecrash</em>&#8216; available.  In any case, it is a fairly simple matter to either turn this off or otherwise make it more intelligent, if your Jira server is incapable of running &#8216;<em>symbolicatecrash</em>&#8216;.</p>
<p>Also note that the native iOS code has been restructured to build a universal iOS framework as opposed to an architecture-specific static library.  This is done using Karl Stenerud&#8217;s excellent <a href="https://github.com/kstenerud/iOS-Universal-Framework" target="_blank">XCode4 Project Template</a>.  You will need to install this template in order to actually build the modified code.  Or you can just refactor it back to build a static library again, but why would you want to do that?</p>
<p>When using the iOS framework, be aware that you will need to set the &#8216;-<em>all_load</em>&#8216; linker flag and also include all the images and nibs in the framework&#8217;s &#8216;<em>/Resources</em>&#8216; folder as part of your build.  You will probably also want to include the &#8216;<em>JMCLocalizable.strings</em>&#8216; file in the same folder as well, to provide proper text and labels on Jira Mobile Connect&#8217;s UI elements.</p>
<p>Regardless, if you do a lot of iOS development and are already using Jira (like you should be) then I encourage you to check this out.  This is the Jira Mobile Connect plugin, now with automatic grouping and error log symbolication.</p>
]]></content:encoded>
			<wfw:commentRss>https://codethink.no-ip.org/archives/788/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code Formatting Plugin Updated</title>
		<link>https://codethink.no-ip.org/archives/144</link>
		<comments>https://codethink.no-ip.org/archives/144#comments</comments>
		<pubDate>Sat, 29 Jan 2011 05:32:46 +0000</pubDate>
		<dc:creator><![CDATA[aroth]]></dc:creator>
				<category><![CDATA[banter]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://codethink.no-ip.org/wordpress/?p=144</guid>
		<description><![CDATA[I&#8217;ve just updated the code formatting/syntax highlighting plugin used by this site to the very cool Syntax Highlighter Evolved. This plugin is a marked improvement over the previous plugin, providing such niceties as automatic non-copyable line numbers, horizontal scrolling, built-in &#8230; <a href="https://codethink.no-ip.org/archives/144">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve just updated the code formatting/syntax highlighting plugin used by this site to the very cool <a href="http://www.viper007bond.com/wordpress-plugins/syntaxhighlighter/" target="_blank">Syntax Highlighter Evolved</a>.  This plugin is a marked improvement over the previous plugin, providing such niceties as automatic non-copyable line numbers, horizontal scrolling, built-in highlighting rules for just about any common language, and so on.   </p>
<p>No other news to report at the moment, I just wanted to publicly show my support for this excellent WordPress plugin.</p>
<p>Update:  Much as I still love this plugin, it did introduce a pretty severe layout bug in Internet Explorer (any post with a code block in it would be stretched beyond the width specified in the theme layout, causing the posts to overlap with the right-nav section).  I fixed this by adding the following to my IE stylesheet:</p>
<pre class="brush: css; title: ; notranslate">.entry-content {
	width: 100%;
}</pre>
<p>And while we&#8217;re on the subject, the <a href="http://wordpress.org/extend/plugins/lightbox-2/" target="_blank">image lightbox plugin</a> also did not work correctly in Internet Explorer by default (the background overlay was solid black instead of translucent).  I had to add the following CSS to get it working (again in the IE-only stylesheet):</p>
<pre class="brush: css; title: ; notranslate">#stimuli_overlay {
    display: none;
}</pre>
<p>Note that this completely removes the background overlay.  I could probably get the alpha set correctly without too much more fuss, but I think this works well enough for now.</p>
<p>To my fellow web-developers, I can only say the following:  I know it&#8217;s fun to dump on IE for its lack of standards compliance, poor performance, and other failings, but at the end of the day IE is still the most used browser in the world, so it behooves us to always test our work in Internet Explorer when authoring online content or when authoring any code that will be used to generate online content.</p>
]]></content:encoded>
			<wfw:commentRss>https://codethink.no-ip.org/archives/144/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
