Xcode Tips and Tricks - Part 5: Schemes and Targets | Ray Wenderlich

Manage building your projects using schemes, configurations and targets. You'll create a lite version of the sample app in a new target.


This is a companion discussion topic for the original entry at https://www.raywenderlich.com/3199-xcode-tips-and-tricks/lessons/5
1 Like

can we have a storyboard files with the same name for the different target , let 's say we need a different Design for Home VC and Details VC for the full and Light version and we created them in the Main.storyboard , what’s the best solution for that ?
is there something like Variant in Android !

@ibtikar - Because the storyboard is a real file in a real directory, you can’t call two storyboards by the same name.

I think I would instantiate the specific view controller in code and test the lite-version flag.

Well, you simply could put your identically named storyboards in seperate directories to solve this conflict. Naming the directories to reflect the targets might be a good idea.

If you consider this route though, I would advice to take extra care to avoid ressource duplication, i.e. by using containers.

Hope it helps

Klaus

1 Like

Checkbox framework successfully builds, Xcoder successfully builds and runs, but Xcoder Lite throws a “No such module ‘Checkbox’” error on the first swift file (ShortcutDetailViewController.swift) it tries to compile.

Any ideas how I can troubleshoot that?

  • Jerry

@jerryp48 - You can get this error when the framework isn’t in your Embedded Binaries and Linked Frameworks.

Click on Xcoder at the top of your Project Navigator and select the Xcoder Lite target.

On the General tab, check Embedded Binaries. If Checkbox.framework isn’t listed, drag on Checkbox.framework from the Project Navigator. This should add the framework to Linked Frameworks too.

Clean the project (Shift Cmd K) and build and run and cross fingers :smiley:

Just as an aside, if your project/target is working, as mine was, to reconstruct this error, I had to delete the Derived Data folder.

To reproduce your error I first tried removing the framework from Embedded Binaries, but the error still didn’t occur.

But I went to Preferences -> Locations and navigated to DerivedData and removed the folder and did a clean build, and was able to reproduce the “No such module Checkbox” error.

Conclusion. If at some future time you want a really really clean build, remember to remove the DerivedData folder. (It can also help with weird errors).

You were right, Checkbox was not in Embedded Binaries. I dragged it there and oddly it created a duplicate in Linked Frameworks and Libraries. I thought that was odd so I deleted all three and dragged Checkbox back to Embedded Binaries (which added it to both Embedded Binaries and Linked Frameworks and Libraries), deleted DerivedData, cmd-B and same error.

Checkbox framework and Xcoder schemes still build fine.

Not sure how to proceed.

  • Jerry

I would start by deleting it again, quit Xcode, do all the cleaning and restart the computer. That’s a clean slate. Then add the framework to embedded binaries.
Sometimes also I throw my hands up in dismay and start again. Which is why I suggested taking a backup first.
If there is a definitive answer I am yet to find it.

I actually had the exact same issue, when trying to run the Release Lite Version configuration I had the “No Such Module Checkbox” even when the Checkbox.framework was in Embedded Binaries & Linked Frameworks and Libraries.

The solution for me was to create the duplicate Lite Version configuration in the Checkbox.xcodeproj too, @caroline can you give me some feedback on why this is and whether this is necessary?

Cheers,
Andy

1 Like

I had the same issue as well. I haven’t tried to create the same configuration in Checkbox framework, I will try after posting this.

I found a workaround by setting the framework search path for the new target:

Add the following Framework Search Path in the Build Settings of the target: $(SYMROOT)/Release$(EFFECTIVE_PLATFORM_NAME) and make it non-recursive

and it will build successfully.

3 Likes

Yep that worked for me too.

Jerry

Yep, that worked for me too!

Yes, it works for me as well:slight_smile:

Adding Framework Search Path worked for me. Thanks.

1 Like

This solution suits for me. Thanks! :slight_smile:

This topic was automatically closed after 166 days. New replies are no longer allowed.

An applause. Wonder how you found it.

Yep. Still works in 2020 on Xcode 11.

@caroline: In the lesson you do things 2 ways. The original poster jerryp48 was probably asking about the first way (this is where I encountered it) and your answer is not relevant until the second way when you have two targets.