Three20 framework with line-height? - ios

somebody knows if it's possible to set a specific line-height for three20-styled texts?
thanks

There is no easy way to achieve decent line spacing on TTStyledText. It is really very noticeable when you use non-standard fonts at larger sizes. However you can get it working with a lot of hacking using TTStyledLayout and categories. Look at internal functions that modify _lineHeight and in particular
- (void)inflateLineHeight:(CGFloat)height
- (TTStyledFrame*)addFrameForText:(NSString*)text element:(TTStyledElement*)element ...
My version is way too messy to release but if someone had the time to do a clean implementation it would be a great addition to three20 (copy and paste would be a nice-to-have also)

Related

How to reuse an Xcode project into a new project? Static library, Framework, Targets?

I built an iOS project (actually workspace because of Pods) that is 100% functional, with its logic and UI (Storyboard and xibs). Now I would like to reuse this app/project as a "core" for future apps.
I've been searching about it and there are several solutions like Static libraries, Frameworks and Targets. But I am not sure which one would be the best in my case. I would like to reuse all the UI part as well.
I saw that most of the people agree that the best approach for reusing code is static libraries, even thought it looks not so straight forward. But I think for reusing UI probably Targets is the best solution. The problem I see is that if a build 10 apps based on my core project, the new project will be huge, so probably it is not the best option.
I don't know if you guys have any better idea or opinion.
Thanks in advance!!
There are several things you can do, and I will try to go through them.
If you have minor changes on your "base" app, then the best thing would be using targets(build schemes). This way you can add things to build phases and therefore, add files that you need. This might be the quickest possible way to do what you want but here are some drawbacks: What if you have 5 apps, and for each one you have QA and prod. That 10 build phases. If you keep using your app in no time you will find hard to manage it.
Another thing could be to create different project, and include all the files you have (and you need), inherit from there and have extended functionality/UI/UX. This is slower approach then number 1, but you will have dependency on the files that you might change in one app and don't want to propagate that change in other apps. So the drawback would be that you have to be extra careful, and plan a lot of things in advance.
Third thing could be to create base app group(or project) and then you are certain what to do, where and what that change could do to other apps(since you know that this file is actually being reused).
And finally, there is a framework, which is my favorite. I am working on one project that inherits base app and we found that is a huge problem. You start separated and then, one thing by one, you have entangled code for specific app and base app like headphones in pocket. And if you don't refactor it ASAP, it will became really hard to resolve these kind of issue. Not to mention merging and other stuff. Here is an excellent article about creating framework http://www.raywenderlich.com/65964/create-a-framework-for-ios . Off course, there is a price to pay and that's every change that you create you must update library and add it again to project. This thing can be easily forgotten and if you are working in team could produce build crash.
All after all, you predicate that you will have more then 5 apps, so I would say go with the framework. This way you will have much cleaner and separated app, and won't have to think about changing things and how these changes would affect your other apps.
I recommend you use a custom project template. I did it perfectly today. I had the same needs as your. Follow this link: https://github.com/reidmain/Xcode-6-Project-Templates/tree/master/iOS%20Application.xctemplate
Download it. You can add all the files from existing project into this template, storyboards too. If you have any doubts I will help you.

Viewing class/protocol hierarchy in XCode 5

I've come to iOS from Java world, and one of the most useful features in Java is JavaDoc. It is possible to see ALL implementors of specific interface or descendants of specific class with ease. Is there something similar in XCode 5?
Yes, there are Symbol Navigator, but it shows either hierarchy of ALL classes/protocols or only project-specific classes. And what I want is to quickly find out, for example, all descendants of UIDynamicBehavior class. How to do it fast and efficent in XCode 5?
Thanks a lot in advance! :)
Actually not an answer you do want to hear, but you should try AppCode. If you're from Java world, you're probably familiar with IntelliJ IDEA, which is basically what AppCode is.
^H and ...

Storyboards and SVN conflicts

This is a problem we never had to deal with until storyboards were introduced - Whenever there was a chance of conflict in UI, we just made sure that no 2 developers ever worked on the same XIB file simultaneously. The reason we refrained from resolving XIB conflicts is that there may be problematic side-effects (XIB is represented in XML format so there isn't a "good" way to merge 2 versions).
Now we are facing this issue because all of our UI elements are within the same .storyboard file - prevention of simultaneous work on any 2 UI elements in the project makes working in parallel very difficult.
Any suggestions as to how to tackle this issue? Thanks in advance for your efforts.
Break up your storyboard into multiple storyboards.
There is no reason for your app to contain only one storyboard. Break your storyboard up into module storyboards. You can use +storyboardWithName:bundle: to load storyboard modules.
See: UIStoryboard Best Practices for other good storyboard ideas.
Update
It's important to note this is not a complete solution to the problem. In the same way you cannot completely avoid the possibility of merge conflicts in source code decomposing a giant class into smaller modules, you can't avoid the possibility storyboard merge conflicts either. The idea is to reduce the likelihood until it becomes a manageable problem.
There will alway be tricky merge situations in a large codebase. A properly decomposed solution will reduce the number of conflicts and minimize the number of lock out needed.
Here's something I came up with when I was just messing around, trying to find a solution.
If you right click your storyboard file in Xcode and navigate to "Open As" you'll see that there are multiple options - the default is "Interface Builder - iOS Storyboard". However, you can also select "source code".
If you open storyboard up in source code mode, it's possible to make changes (although kind of a pain). But you can add code from other storyboards and make changes in your own - I haven't used SVN but with a git repository I can view other versions of the storyboard and copy code in.
I wouldn't say that this is a great solution - I've had some trouble with Xcode randomly crashing when I try to reopen the storyboard in IB. Sometimes pasting code in works, sometimes it doesn't. A few times I had to change the <scene> tag's value. In my experience it's pretty hit-or-miss but if you back up your files before you try anything it might work.
If it does work, let me know - I'm interested in seeing whether a solution can be found to this problem.
Is this about merging XML files?
Fortunately, SVN allows you to change the merge tool you use to perform merging for different types of file. (eg tutorial for using P4Merge)
So now you just need to find a great tool for merging XML files (good luck :) )
there's WinMerge (with the DisplayXMLFiles prefilter), or diffxml, or XMLMerger or a java xmlmerge tool
You can also have a look at a modern source code management tool. Git for example has intelligent merge features. See this link for why you should consider upgrading your workflow.

Three20 competitors/alternatives

I see three20 a very powerful lib, spicily because Facebook and Twitter use it. I just want to know if there are any competitors/alternatives for Three20? or even simple.
nimbus seems to be a project that will address some of the issues.
I use Three20 a lot, but I'm always in search of an alternative, because Three20 is not a lightweight framework and because importing only a few features of Three20 is not practical. But I don't know any good alternative. If you only need a few features I prefer to write my own code for it or use another library.
For some features of Three20 I know other libraries that does the same thing. It's always a better way to use small libraries, because of file size and side-effects.
UILabel with styled text: OHAttributedLabel
Load and cache images asynchroniously: ImageLoader
Pull to refresh on a table view: PullToRefresh
In addition to this list you can have a look at TapkuLibrary which adds features like CoverFlow or a CalendarView to your app.
Finally GitHub is always a good resource, when you search libraries for special features.
Check this list of iOS controls.
You'll find over 200 open source custom controls there. I've used some of them (star rating, confirm button), it's lightweight and easy to embed. Check that the license suits your needs before though!
THree20 is one of the few libs but if you look around github you can find plenty of sample ios projects with source code to learn from and adapt to your app.
Three20 provides a lot of useful wrapper to facilitate development. It's biggest advantages and until know nothing could replace it.

Using Syntax Highlighting

I'm trying to write an IDE for the iOS and I stumbled on a problem. I of course wanted to be able to do syntax highlighting, but I have no idea how I have to get this to work.
I have been googling over a month now, but I haven't found anything useful. Most libraries are C++. That I find no problem, I know enough of C++, but they all use the Boost libraries and I heavily doubt if it's easy to install them on a jailbroken iOS device, or even compile them for the iOS on the Mac.
So I come here for help. What should I do? Should I use a PHP syntax highlighter, which always colors the whole document? Should I write a syntax highlighter my self, that doesn't use the Boost library? Or does somebody here know another library, which can be used on the iOS?
Thank you in advance,
ief2
i have a simillar problem about syntax highlighting, but i prefer to solved it using UIWebview than using core text, because that is a different pixel in rendering text in core text and UITextview (in my problem i was using a core text view that cover by uitextview), and then i try to solved using uiwebview, even i'm still on developing but i can say that it is better using uiwebview than core text, maybe you can take a look at this link http://alexgorbatchev.com/SyntaxHighlighter/ it is an open source code, but it develop using javascript.
Most Boost libraries are header-only. There are only a few Boost libraries, like those for threading and asynchronous I/O, that use a compiled library. If you've found some solutions that would work fine aside from your worries about using Boost, then I would look at them again, as they'll likely work. Even if you must use a Boost library that is not header-only, you can always build it as a static library and link that into your application, so that in the end the only thing that needs to be installed is just your app bundle.
I know this is old, but in case anybody is looking for a complete syntax highlighter for iOS, there's two options:
Highlightr: A Swift library for syntax highlighting, supports hundreds of languages but uses JS as backend. It's fast enough for live editing, though. (Disclaimer: I am the creator of this library).
SyntaxKit: A native solution on early stages of development. Should support any TextMate syntax in the future.

Resources