[MacRuby] #1178: Mac App Store reviewers rejecting MacRuby app's due to library name

MacRuby ruby-noreply at macosforge.org
Fri Mar 4 17:43:58 PST 2011


#1178: Mac App Store reviewers rejecting MacRuby app's due to library name
-----------------------------------+----------------------------------------
 Reporter:  rsepulveda2@…          |       Owner:  lsansonetti@…        
     Type:  defect                 |      Status:  new                  
 Priority:  blocker                |   Milestone:                       
Component:  MacRuby                |    Keywords:                       
-----------------------------------+----------------------------------------
 My App Store app was rejected twice because the testers claimed that i was
 using
 "</Library/Frameworks/MacRuby.framework>".
 But i am in fact embedding MacRuby.framework in my package using the
 macruby_deploy script in XCode, which uses the install_name_tool to fix
 the library paths.


 {{{
   PATH="$PATH:/usr/local/bin" macruby_deploy --verbose --embed
 "$TARGET_BUILD_DIR/$PROJECT_NAME.app"

 }}}

 I finally figured out what they were finding by running:


 {{{
   find . -exec otool -l {} \; > libs

   grep libs MacRuby

 }}}

 They are apparently flagging:


 {{{
         cmd LC_ID_DYLIB
       cmdsize 104
          name
 /Library/Frameworks/MacRuby.framework/Versions/0.8/usr/lib/libmacruby.dylib
 (offset 24)
    time stamp 1 Wed Dec 31 18:00:01 1969
       current version 0.8.0
 compatibility version 0.8.0
 Load command 4

 }}}

 which contains the name '/Library/Frameworks/MacRuby.framework'.This is
 found in the dylibs themselves.. which really isn't accessing a library
 but is instead their ID.

 I made a small modification to the macruby_deploy script to change the id
 of the libraries... By adding the following to the fix_install_name
 method.


 {{{
     # changes to fix dylib id to something that doesn't flag an app store
 rejection

     patterns = [ File.join(app_macruby_usr, 'lib/libmacruby*.dylib') ]
     patterns.each do |pat|
       Dir.glob(pat).each do |bin|
         execute("#{@install_name_tool} -id
 @executable_path/../Frameworks/MacRuby.framework/Versions/#{@macruby_install_version}/usr/lib/libmacruby.dylib
 '#{bin}'")
       end
     end

 }}}

 I am not sure if this is the best solution but it works and my app was
 accepted the next time it was submitted.

-- 
Ticket URL: <http://www.macruby.org/trac/ticket/1178>
MacRuby <http://macruby.org/>



More information about the macruby-tickets mailing list