This may be MacOS specific, but I noticed that :async yes only works with :results output; :results value never returns.
A MWE is: #+begin_src python :async yes :results value :session python 12 #+end_src This ought to return 12, but the "#+RESULTS:" field only ever shows the value of the temp file I believe the issue comes from the regexp used for org-babel-comint-async-indicator on line 540 of ob-ipython.el. It is currently "ob_comint_async_python_\\(.+\\)_\\(.+\\)", which means that, if the temp file's path contains underscores (this is the bit I believe is MacOS specific), the regex will greedily consume those underscores, and (match-string 1) will fail to identify what type of results we have. I'm not too familiar with the code but, given that the first group seems to only ever be a simple word, perhaps the replacing this regexp with "ob_comint_async_python_\\(\\w+\\)_\\(.+\\)" would be sufficient?